이 오류에 대한 여러 게시물을 보았지만 해결 방법을 찾지 못했습니다. 내 코드에는 "유전자"의 벡터가 있고 각 유전자는 int 형식의 소스와 대상을 포함합니다.C++ 런타임 오류 : 무료() : 다음 크기가 잘못됨 (빠름)
유전자 벡터에서 소스와 대상의 가능한 모든 값을 모두 포함하는 int 벡터를 만들고 싶습니다. 먼저 각 유전자를 살펴보고 소스와 대상을 확인한 다음 해당 ID가 이미 벡터에 존재하는지 확인합니다. 만약 그렇다면 그것을 무시하고 새로운 값을 벡터에 추가하십시오.
void addMutations(vector<Gene*>* genome){
vector<int> nodeIDs;
for(int i = 0; i < genome->size(); i++){
int src = genome->at(i)->sourceNeuronID;
int dst = genome->at(i)->destinationNeuronID;
if(find(nodeIDs.begin(), nodeIDs.end(), src) == nodeIDs.end()){
nodeIDs.push_back(src);// <-- Issue is here
}
if(find(nodeIDs.begin(), nodeIDs.end(), dst) == nodeIDs.end()){
nodeIDs.push_back(dst);// <-- Probably here too
}
}
이 문제는
src
및
dst
이
for
루프의 반복의 끝에서 범위를 벗어난 이동한다는 사실에서 나오나요?
"문제"는 ... 무엇일까요? 제목의 오류 메시지? 나는 int의 벡터에'push_back '이 어떤 식 으로든'free()'이 없기 때문에) 오류를 줄 수있는 방법을 보지 못했다. – DevSolar
일반적으로 할당 된 메모리 범위를 쓸 때 발생합니다. 내 제안은 당신이 포인터를 너무 많이 사용하지 않는다는 것이다. 벡터에 포인터를 전달하는 대신 참조를 전달하십시오. 그리고 포인터 벡터를 사용하는 대신 인스턴스의 벡터를 사용하십시오 (사용하지 않는 다형성에 대한 포인터가 필요하지 않은 경우). 또한 노드 ID에 대한 벡터 대신 [std :: unordered_set'] (http://en.cppreference.com/w/cpp/container/unordered_set)를 사용할 수 있습니다. –
당신의 질문에 [MCVE] –