C语言关于开辟内存和指针的问题

#include<stdio.h>#include<stdlib.h>typedefstructBiTNode{chardata;structBiTNode*lchild... #include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTnode,*BiTree;

void main()
{
BiTree *tree=NULL;
*tree=(BiTree)malloc(sizeof(BiTnode));
return;
}

以上代码运行出错,请高手给解答下这是怎么回事呢?谢谢!!
展开
 我来答
明阿哩05
2012-08-28 · TA获得超过268个赞
知道答主
回答量:417
采纳率:0%
帮助的人:260万
展开全部
你这是想用二级指针 ,,,但事实上 却得到了 不正确的 结果 ,,这也是指针 容易出错的地方。

你先定义了一个二级指针 ,tree 并初始化 为 NULL,也就是 0,tree本身在栈区,但其指向0。
然后 *tree ,这个*tree 的意思 你能明白 吗? 是访问0这个地址,也就是将 后面分配来的地址 写到 0 这个内存地址上,但0号地址事实上不可用,因而导致程序异常。你完全没必要用二级指针 ,也就是你将 main 里面的 两个 两个 * 去掉就可以了 当然 你也没有释放内存。 正确的写法如下:
#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTnode,*BiTree;

void main()
{
BiTree tree=NULL;
tree=(BiTree)malloc(sizeof(BiTnode));
free(tree);
tree=NULL;
return;
}

如果要用二级指针 :
#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTnode,*BiTree;

void main()
{
BiTree tree=NULL;
tree=(BiTree)malloc(sizeof(BiTnode));
//想使用二级指针 可以在这里定义
BiTree * ptree=&tree; //ptree 是 指向 你申请的空间的二级指针
free(tree);
tree=NULL;
return;
}
shaoqi08110820
2012-08-28 · TA获得超过2508个赞
知道大有可为答主
回答量:1514
采纳率:100%
帮助的人:1710万
展开全部
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTnode,*BiTree;
void main()
{
BiTree *tree=NULL;
tree=(BiTree*)malloc(sizeof(BiTnode));
return;
}
//你要让他的指针准确指向一个内存块,而不是用他的间接地址指向
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lancd412
2012-08-28
知道答主
回答量:3
采纳率:0%
帮助的人:4623
展开全部
变量 tree应该定义为BiTree ,并将*tree改为tree, 因为BiTree 类型本来就是指向节点类型(BiTnode)的指针,没必要再定义指向BiTree类型的指针了。修改后代码为:
BiTree tree=NULL;
tree=(BiTree)malloc(sizeof(BiTnode));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式