【发布时间】:2014-05-03 11:30:13
【问题描述】:
我的二叉搜索树析构函数如下所示。
~BSTree()
{
if (this == nullptr || this->left == nullptr && this->right == nullptr)
{
return;
}
this->left->~BSTree();
delete this->left;
this->right->~BSTree();
delete this->right;
}
在调用堆栈大约 >= 4 次调用后,我的程序在 if() 处崩溃并出现 Access Voilation Exception。
我的字段只有三个:int key;,BSTree *left; 和 BSTree *right;
this 似乎不是 NULL,但它的字段无法从内存中读取。 我如何检查他们是否可以,如果不可以remove this; 以防止异常?
【问题讨论】:
-
不要自己调用析构函数。
delete会为你做这件事。 -
每个节点都涉及两次析构函数
-
this == nullptr不是很有用。 -
Chnossos,Dieter Lücking 你是对的,我不知道
delete调用了析构函数;我以为这只是为了清除记忆。垫子,我应该用什么? -
“我应该使用什么” - 做什么?根据定义,
this不能为空。 (只有当您的程序从较早的错误中进入未定义行为区域时,此测试才能成功,在这种情况下,无论如何所有赌注都已关闭)
标签: c++ exception memory c++11 access-violation