矢量析构函数导致程序在C ++中崩溃

时间:2011-01-21 03:52:05

标签: c++ pointers vector destructor

我有一个名为vector<vector<Person*>*>*的组(是的,我知道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;

然后我用这行代码调用方法:

vector<vector<Person*>*> *currentMatch = sort(*people);

我可以一直运行gdb到返回组;声明,并查看数据结构,这很好。但是,当我退出方法时,程序崩溃,堆栈跟踪显示它在向量析构函数本身中崩溃。

究竟是什么导致这种情况?它不应该是Person析构函数的问题,因为内部向量是指向人的指针。另外,取出删除行并没有什么区别。 (是的,我知道它会留下内存泄漏,但它可能有助于诊断问题)。

谢谢。

编辑:此外,错误是一个sigabrt

1 个答案:

答案 0 :(得分:6)

如果此代码段准确无误,那么您使用未初始化的指针unsortable进行各种操作。我很惊讶它远离方法的退出。