gpt4 book ai didi

C++ 析构函数导致崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:36 25 4
gpt4 key购买 nike

好的,所以我得到了一个非常复杂的程序来模拟学生、单位和学生在单位注册的 uni 系统。

学生存储在二叉搜索树中,单位存储在标准列表中。

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

单元集合(在列表中存储单元)作为主要功能所在的静态变量,学生的二叉搜索树也是如此。

当最后关闭程序时,我调用每个程序的析构函数。但在某个阶段,在单元端的析构函数中,

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com