C++ 析构函数导致崩溃

标签 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()
{
}

所以是的,任何帮助将不胜感激

最佳答案

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

看看 std::list documentation .

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

关于C++ 析构函数导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890589/

相关文章:

c++ - 用不同的访问规范覆盖 C++

C++:如何声明私有(private)成员对象

c++ - c++什么时候程序不调用析构函数?

每次使用 List 的方法后调用 C++ List 析构函数

c++ - 为什么 std::unary_function 不包含虚拟析构函数

c++ - 未初始化的值是由堆栈分配创建的 - Qt - C++

具有多个模板参数的 C++ 单模板特化

PHP 析构函数

c++ - 无法将指针位置设置为 C++ 中另一个指针位置的位置

c++ - 删除包含结构的 vector 的 vector