首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

指针指向内存冲突,该怎么处理

2012-05-22 
指针指向内存冲突C/C++ codevoid autoCBiTree(BiTree &T,int TreeFloor)//自动创建一棵满二叉树{int _data

指针指向内存冲突

C/C++ code
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这个环节就出现了问题,也就是说第二层的节点都还没有创建好久提示下面这个内存冲突错误,求正解


[解决办法]
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;
}


[解决办法]
错误的原因是你给T申请空间了,但是你递归了啊,你的lchild和rchild没有空间啊!你需要在递归函数里面给每个节点申请空间。

热点排行