C ++ деструкторы, вызывающие сбой - PullRequest
2 голосов
/ 23 мая 2010

ки, так что я получил кое-какую сложную программу, которая имитирует системы студентов, единиц и студентов, зачисляемых в единицы.

Студенты хранятся в бинарном дереве поиска, Единицы хранятся в стандартном списке.

У ученика есть список указателей юнитов, в котором можно записать, в каких юнитах он зарегистрирован Подразделение имеет список указателей учеников, в которых хранятся ученики, зачисленные в это подразделение.

Наборы единиц (сохраняющие единицы в списке) в виде статической переменной, в которой находится основная функция, как и дерево двоичного поиска учащихся.

когда заканчивается время закрытия программы, я вызываю деструкторы каждого. но на каком-то этапе, во время деструкторов на стороне подразделения,

Необработанное исключение в 0x002e4200 в ClassAllocation.exe: 0xC0000005: Местоположение чтения нарушения доступа 0x00000000.

Деструктор UnitCollection:

UnitCol::~UnitCol() 
{
    list<Unit>::iterator itr;
    for(itr = UnitCollection.begin(); itr != UnitCollection.end();)
    {
        UnitCollection.pop_front();
        itr = UnitCollection.begin();
    }
}

Деструктор юнита

Unit::~Unit()
{
}

теперь у меня та же проблема сорта на стороне студента

BST деструкторы

void StudentCol::Destructor(const BTreeNode * r)
{
    if(r!= 0)
    {
        Destructor(r->getLChild());
        Destructor(r->getRChild());
        delete r;
    }
}

StudentCol::~StudentCol()
{
    Destructor(root);
}

Студенческий деструктор

Student::~Student()
{
}

так что да, любая помощь будет принята с благодарностью

1 Ответ

3 голосов
/ 23 мая 2010

Если ваш UnitCollection равен std::list<Unit>, вам не нужно вручную удалять элементы - сам список уничтожает содержащиеся объекты и освобождает память в своем собственном деструкторе.

Взгляните на std::list документацию .

Я бы также предложил вам опубликовать полный код - часть вашего описания противоречива.

...