导致崩溃的C ++析构函数

时间:2010-05-23 03:25:28

标签: c++ destructor

确定, 所以我得到了一个复杂的程序来模拟学生,单位和单位学生的单一系统。

学生存储在二元搜索树中, 单位存储在标准清单中。

学生有一个单位指针列表,用于存储他/她注册的单位 单位有一个学生指针列表,用于存储在该单元中注册的学生。

单元集合(在列表中存储单元)作为主函数的静态变量,与学生的二进制搜索树一样。

当最终关闭程序的时候,我打电话给每个人的析构函数。但在某个阶段,在单位一侧的析构者中,

ClassAllocation.exe中0x002e4200处的未处理异常: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 个答案:

答案 0 :(得分:3)

如果您的UnitCollectionstd::list<Unit>,那么您不必手动删除项目 - 列表本身包含destroy包含的对象,并在其自己的析构函数中释放内存。

看看std::list documentation

我还建议你发布完整的代码 - 你的一些描述是矛盾的。