Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中导致程序崩溃的向量析构函数+;_C++_Pointers_Vector_Destructor - Fatal编程技术网

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,嗯,我发布了整个内容,因为它们是相关的,但我想他们可能没有。天啊,哇,我做这件事太久了,非常感谢,我相信这就是问题所在,谢谢。天啊,哇,我做这件事太久了,非常感谢,我相信这就是问题所在,谢谢。