C++ 在C+中导致程序崩溃的向量析构函数+;
我有一个C++ 在C+中导致程序崩溃的向量析构函数+;,c++,pointers,vector,destructor,C++,Pointers,Vector,Destructor,我有一个vector*称为groups(是的,我知道shared_ptr,但我不能在这个上下文中使用它们),还有一个称为partialGroups 无论如何,在方法的末尾,我删除了所有的内部向量,但没有删除人本身,因为我仍然希望它们是有效的,所以代码到此结束: // Deal with remaining partial teams vector<Person*> *unsortable; groups->push_back(unsortable); // Remaining
vector*
称为groups(是的,我知道shared_ptr,但我不能在这个上下文中使用它们),还有一个称为partialGroups
无论如何,在方法的末尾,我删除了所有的内部向量,但没有删除人本身,因为我仍然希望它们是有效的,所以代码到此结束:
// 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;
//处理剩余的部分团队
向量*不可排序;
组->推回(不可排序);
//剩下的人
for(无符号整数i=0;i推回(人[i]);
}
//剩余部分群
for(无符号整数i=0;isize();j++){
不可排序->推回(部分组[i]>at(j));
}
删除部分组[i];
}
返回组;
然后,我使用以下代码行调用该方法:
vector<vector<Person*>*> *currentMatch = sort(*people);
vector*currentMatch=sort(*people);
我可以运行gdb到返回组;语句,再看看数据结构,就可以了。然而,当我退出该方法时,程序崩溃,堆栈跟踪显示它在向量析构函数本身中崩溃
究竟是什么原因导致了这一切?Person析构函数不应该有问题,因为内部向量是指向人的指针。此外,去掉删除行也没有什么区别。(是的,我知道这会导致内存泄漏,但这可能有助于诊断问题)
多谢各位
编辑:此外,错误是sigabrt如果此代码片段准确,则您正在使用未初始化的指针进行各种操作,
不可排序
。我很惊讶它竟然能从这个方法中退出。如果这个代码片段是准确的,那么你用一个未初始化的指针来做各种事情,不可排序。我很惊讶它竟然能从这个方法中退出。有什么原因不std::vector
?没有理由在向量中有一个指向向量的指针。你真的喜欢指针吗?你能发布一个完整的测试用例来展示这个问题吗?请仍然减少代码长度,但请确认它只显示您不理解的问题,并且没有您可能理解的问题,例如编译器错误。一开始,你上面的当前代码使用了未初始化的不可排序的UB。@PigBen,@billy,嗯,我在数组中移动了很多东西,但现在,我真的不在乎了,所以我只是把它改回对象数组本身,谢谢你。@Fred,嗯,我发布了整个内容,因为它们是相关的,但我想他们可能不是。有没有理由不是std::vector?没有理由在向量中有一个指向向量的指针。你真的喜欢指针吗?你能发布一个完整的测试用例来展示这个问题吗?请仍然减少代码长度,但请确认它只显示您不理解的问题,并且没有您可能理解的问题,例如编译器错误。一开始,你上面的当前代码使用了未初始化的不可排序的UB。@PigBen,@billy,嗯,我在数组中移动了很多东西,但现在,我真的不在乎了,所以我只是把它改回对象数组本身,谢谢你。@Fred,嗯,我发布了整个内容,因为它们是相关的,但我想他们可能没有。天啊,哇,我做这件事太久了,非常感谢,我相信这就是问题所在,谢谢。天啊,哇,我做这件事太久了,非常感谢,我相信这就是问题所在,谢谢。