请教-----Debug Assertion Failed。

zxzSprinkle 2009-11-07 08:32:07
今天写了一个二叉树的类,成员函数
template<class DataType>
void BinaryTree<DataType>::DelTree(BinaryNode<DataType>* T_Root){
if(T_Root!=NULL){
DelTree(T_Root->left);
DelTree(T_Root->right);
delete T_Root;//*************
}
}
目的是要清空以节点指针T_Root为根节点的二叉树。其中BinaryNode<DataType>是包含数据域data,左后继节点left,右后继节点right的模板类,编译成功通过,但执行时出现下面的对话框
Debug Assertion Failed
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

单步调试中删除最左边的叶子节点时//*************处出错。
网上查到一些信息说是堆栈内存释放的问题,但没弄清楚是怎么回事,没有访问越界,也没有重复释放内存,可能是递归释放内存会有问题。请各位高手帮忙看一下,兄弟不胜感激!
...全文
79 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxzSprinkle 2009-11-07
  • 打赏
  • 举报
回复
哦。。对了。。。BinaryNode <string> n3("c",0,&n1,&n2); 中的0是我为非递归后序遍历设置的标志位,其实构造函数是
BinaryNode(DataType item,int Tag=0,BinaryNode<DataType>* L=NULL,BinaryNode<DataType>* R=NULL)
:data(item),tag(Tag),left(L),right(R){}
刚刚被我删了。。。
你看看这样的二叉树构造是不是有问题。。。
zxzSprinkle 2009-11-07
  • 打赏
  • 举报
回复
类的构造函数:
BinaryTree(BinaryNode<DataType>& Root_Node){root=&Root_Node;}
BinaryNode(DataType item,int Tag=0,BinaryNode<DataType>* L=NULL,BinaryNode<DataType>* R=NULL)
:data(item),left(L),right(R){}
main函数:

BinaryNode<string> n1("a");
BinaryNode<string> n2("b");
BinaryNode<string> n3("c",0,&n1,&n2);

BinaryTree<string> T(n3);
T.DelTree(T.GetRoot());
是这样调用的。
WaistCoat13 2009-11-07
  • 打赏
  • 举报
回复
你这块代码应该没啥问题,可能是其他地方导致的。
zxzSprinkle 2009-11-07
  • 打赏
  • 举报
回复
还是同样的问题。。。
Google上搜索:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)可以在msdn上看到很多关于这个问题的帖子,说是堆栈问题,但是和这个问题好像不太一样。。。。。。
WaistCoat13 2009-11-07
  • 打赏
  • 举报
回复
删除完赋值为NULL试试。

delete T_Root;
T_Root = NULL;

zxzSprinkle 2009-11-07
  • 打赏
  • 举报
回复
构造函数默认指针域都是置为NULL的。。。。要是这里的原因,那其他函数也将出问题,可是其他函数都运行的很好。。。。
不知道你以前有没有写过这样的递归释放内存的代码。。。。。或者有什么办法实现相同的目的。。。
WaistCoat13 2009-11-07
  • 打赏
  • 举报
回复
添加一个叶子节点时首先要把left和right赋值为NULL才行。
WaistCoat13 2009-11-07
  • 打赏
  • 举报
回复
是不是你的最底层的叶子节点的T_Root->Left没有赋值为NULL吧。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧