确定, 所以我得到了一个复杂的程序来模拟学生,单位和单位学生的单一系统。
学生存储在二元搜索树中, 单位存储在标准清单中。
学生有一个单位指针列表,用于存储他/她注册的单位 单位有一个学生指针列表,用于存储在该单元中注册的学生。
单元集合(在列表中存储单元)作为主函数的静态变量,与学生的二进制搜索树一样。
当最终关闭程序的时候,我打电话给每个人的析构函数。但在某个阶段,在单位一侧的析构者中,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()
{
}
所以是的,任何帮助都会非常感激
答案 0 :(得分:3)
如果您的UnitCollection
是std::list<Unit>
,那么您不必手动删除项目 - 列表本身包含destroy包含的对象,并在其自己的析构函数中释放内存。
我还建议你发布完整的代码 - 你的一些描述是矛盾的。