Векторный деструктор, вызывающий сбой программы в C ++ - PullRequest
0 голосов
/ 21 января 2011

У меня есть vector<vector<Person*>*>*, называемый группами (да, я знаю о shared_ptr, но я не могу использовать их в этом контексте), и еще один, называемый частичныйГруппы

Во всяком случае, в конце метода я удаляю все внутренние векторы, но не самих людей, потому что я все еще хочу, чтобы они были действительными, и вот конец кода:

// 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, поскольку внутренний вектор имеет указатели на людей. Кроме того, удаление строки удаления не имеет значения. (Да, я знаю, что это приведет к утечке памяти, но это могло бы помочь диагностировать проблему).

Спасибо.

edit: Также ошибка sigabrt

1 Ответ

6 голосов
/ 21 января 2011

Если этот фрагмент кода является точным, вы делаете все с неинициализированным указателем, unsortable. Я удивлен, что доходит до выхода из метода.

...