指针指向内存冲突

Hughen 2012-05-19 12:50:59

void autoCBiTree(BiTree &T,int TreeFloor)
//自动创建一棵满二叉树
{
int _data;
_data=rand()%1001;
T->data=_data;
TreeFloor--;
if(TreeFloor==0)
return;
else
{
autoCBiTree(T->lchid,TreeFloor);
autoCBiTree(T->rchild,TreeFloor);
}
}

这是自动创建二叉树的函数体,运行之后,在TreeFloor=4这个环节就出现了问题,也就是说第二层的节点都还没有创建好久提示下面这个内存冲突错误,求正解
...全文
114 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hughen 2012-05-19
  • 打赏
  • 举报
回复
下面这张图片是上面未正确显示的那张
Hughen 2012-05-19
  • 打赏
  • 举报
回复
5楼和7楼说的太正确了,忘了给lchild和rchild分配空间了,原以为它会自动指向,嘿嘿
明白了
W170532934 2012-05-19
  • 打赏
  • 举报
回复
错误的原因是你给T申请空间了,但是你递归了啊,你的lchild和rchild没有空间啊!你需要在递归函数里面给每个节点申请空间。
Hughen 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

T分配空间了没有?
使用之前需要malloc分配空间一下
[/Quote]
在主函数的开头我就申请了空间

int main()
{
BiTree T=new BiTNode;
..........

其中运行到内存冲突的地方,中断之后看局部变量,如图:
zhqhaiqing 2012-05-19
  • 打赏
  • 举报
回复
autoCBiTree(T->lchid,TreeFloor);autoCBiTree(T->rchild,TreeFloor);有问题,传引用,要确保T->lchild和T->rchild存在,即不为空
通常做法是使用指针,递归时在内部分配内存。


#include "stdafx.h"
#include <stdlib.h>


/* 二叉樹的二叉鏈表存儲表示 */
struct BiTree
{
int data;
struct BiTree *lchild,*rchild; /* 左右孩子指針 */
};

bool autoCBiTree(BiTree *pRoot,int TreeFloor)//自动创建一棵满二叉树
{
if( !pRoot )
return false;

int _data;
_data=rand()%1001;
pRoot->data=_data;
TreeFloor--;
if(TreeFloor==0)
{
pRoot->rchild = NULL;
pRoot->lchild = NULL;
return false;
}
else
{
pRoot->lchild = new BiTree;
pRoot->rchild = new BiTree;

autoCBiTree(pRoot->lchild,TreeFloor);
autoCBiTree(pRoot->rchild,TreeFloor);
}

return true;
}




int _tmain(int argc, _TCHAR* argv[])
{
BiTree* pRoot = new BiTree;
autoCBiTree(pRoot,4);
getchar();
return 0;
}

無_1024 2012-05-19
  • 打赏
  • 举报
回复
T分配空间了没有?
使用之前需要malloc分配空间一下
Hughen 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

T->data=_data;
T这个指针申请内存了么??
[/Quote]
申请了,T在程序开头就申请了
其中T是一个结构体指针

typedef struct BiTNode
{
int data;
struct BiTNode *lchid, *rchild;
}BiTNode, *BiTree;
W170532934 2012-05-19
  • 打赏
  • 举报
回复
T->data=_data;
T这个指针申请内存了么??

64,654

社区成员

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

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