나는 vector<vector<Person*>*>*
라는 그룹이에 충돌하는 (예, 나는 shared_ptr에 대해 알고,하지만 난이 상황에서 사용할 수 없음), 다른 하나는에, 어쨌든 partialGroups 벡터 소멸자의 원인이 프로그램은 C++
// Deal with remaining partial teams
vector<Person*> *unsortable;
groups->push_back(unsortable);
// Remaining people
for(unsigned int i = 0; i < people.size(); i++) {
unsortable->push_back(people[i]);
}
// Remaining partial groups
for(unsigned int i = 0; i < partialGroups.size();i++) {
for(unsigned int j = 0; j < partialGroups[i]->size(); j++) {
unsortable->push_back(partialGroups[i]->at(j));
}
delete partialGroups[i];
}
return groups;
: 나는 여전히 유효 할 원하기 때문에 방법의 끝이 나는, 내부 벡터의 모두 삭제 아니라 사람 자체, 그래서 여기에 코드의 끝은 코드 줄 :
vector<vector<Person*>*> *currentMatch = sort(*people);
GDB를 모두 반환 그룹으로 돌릴 수 있습니다. 성명서를 작성하고 데이터 구조를 살펴 보더라도 괜찮습니다. 그러나 메서드에서 빠져 나와서 프로그램이 충돌하고 스택 추적에서 벡터 소멸자 자체가 충돌하고 있음을 보여줍니다.
이 문제의 원인은 무엇입니까? 내부 벡터는 사람을 가리키는 포인터이기 때문에 Person 소멸자에 문제가 없어야합니다. 또한 삭제 라인을 제거해도 차이가 발생하지 않습니다. (예, 메모리 누출이 있지만 문제를 진단하는 데 도움이되었을 것입니다.)
감사합니다.
편집 : 또한, 오류는이 코드가 정확 경우 초기화되지 않은 포인터, unsortable
와 모든 종류의 것들을하고있는 SIGABRT
'std :: vector>이 아닌 이유는 무엇입니까? 벡터에서 벡터에 대한 포인터를 가질 이유가 없습니다. –
당신은 정말 포인터 dontcha를 사랑하니? –
문제가있는 완벽한 테스트 케이스를 게시 할 수 있습니까? 코드 길이를 줄이십시오. 그러나 이해할 수없는 문제 만 표시하고 컴파일러 오류와 같이 이해할 수있는 문제가 없는지 확인하십시오. 방망이 바로 위에, 위의 코드는 UB가 uninitialized unsortable을 사용하고 있습니다. –