好的, 所以我得到了一个非常复杂的程序来模拟学生、单元和单元注册学生的大学系统。
学生存储在二叉搜索树中, 单位存储在标准列表中。
学生有一个单元指针列表,用于存储他/她就读的单元 单元有一个学生指针列表,用于存储在该单元注册的学生。
单元集合(在列表中存储单元)作为主函数所在的静态变量,就像学生的二叉搜索树一样。
当最后关闭程序时,我调用每个的析构函数。但在某个阶段,在单元端的析构函数期间,
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()
{
}
所以是的,任何帮助将不胜感激
最佳答案
如果您的UnitCollection
是 std::list<Unit>
那么您不必手动删除项目 - 列表本身会销毁包含的对象并在其自己的析构函数中释放内存。
我还建议您发布完整的代码 - 您的一些描述是矛盾的。
关于C++ 析构函数导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890589/