导致运行时错误的析构函数
Destructor causing runtime error
我使用Trees是为了练习。当前精确的二进制搜索树。我有一个通用的Tree
类,我用它来解决BST问题。因此,我遇到了一个问题,将给定的树(BST(转换为双链表。
我能够成功地将树转换为DLL。但是,问题是当我调用destructor
时。由于我正在将内存分配给我的树的节点,我也希望释放内存。这是Tree
类的析构函数::
~Tree() {
delete root;
root = NULL;
}
这是Node
类的析构函数::
~Node() {
delete left;
delete right;
left = NULL;
right = NULL;
}
所以,程序在最后崩溃了!据我所知,由于我编写的析构函数有点递归地删除了树的所有节点,并且当树被转换为DLL时,左右指针确实指向彼此,因此,在调用析构函数的过程中,析构函数试图删除已经删除的节点,而该指针没有设置为NULL。我该如何克服这一点?因为析构函数重载是不允许的。
有什么办法可以防止这个运行时错误吗??这是代码:http://ideone.com/SDkXY9(Ideone不打印输出,我不知道为什么!(
这里的问题是,您正试图删除发起链式销毁的邻居。你必须添加一个标志,你可以在析构函数中检查哪个邻居可以删除。
~Node() {
_isDestructing = true;
if (!left->_isDestructing) delete left;
if (!right->_isDestructing) delete right;
left = NULL;
right = NULL;
}
相关文章:
- 使用自定义工具集获取动态退出析构函数链接错误 - eh 矢量析构函数
- 模板类中的析构函数给出错误
- C++析构函数调用了错误的对象
- 是否可以在析构函数运行时不销毁 obj
- 使用专用析构函数绕过模板错误
- 需要构造函数/析构函数/类型转换错误
- CArray的析构函数运行大约需要30秒
- 构造函数/析构函数链接错误
- Delete导致基类中的虚拟析构函数出现内存错误
- 来自字典析构函数的隔离错误
- 我使用构造函数(使用内存 Dinamic char *t = 新字符 [10] t = "test123456" ;))时遇到错误堆错误并在析构函数中删除 [] t;错误
- 参数的可变数量函数运行时错误
- boost::asio::io_service析构函数运行很长时间
- 具有变量参数的函数运行时错误
- 在析构函数调用时访问冲突读取位置0xfeeefe2
- C++析构函数运行时错误:无法munmap
- 虚析构函数——必要时
- 是否有可能在c++中调用delete时阻止析构函数运行?
- C++回调函数运行时错误
- Boost变量析构函数导致分段错误