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;
}
以上代码运行出错,请高手给解答下这是怎么回事呢?谢谢!! 展开
#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;
}
以上代码运行出错,请高手给解答下这是怎么回事呢?谢谢!! 展开
展开全部
你这是想用二级指针 ,,,但事实上 却得到了 不正确的 结果 ,,这也是指针 容易出错的地方。
你先定义了一个二级指针 ,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;
}
你先定义了一个二级指针 ,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;
}
展开全部
#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;
}
//你要让他的指针准确指向一个内存块,而不是用他的间接地址指向
#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;
}
//你要让他的指针准确指向一个内存块,而不是用他的间接地址指向
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量 tree应该定义为BiTree ,并将*tree改为tree, 因为BiTree 类型本来就是指向节点类型(BiTnode)的指针,没必要再定义指向BiTree类型的指针了。修改后代码为:
BiTree tree=NULL;
tree=(BiTree)malloc(sizeof(BiTnode));
BiTree tree=NULL;
tree=(BiTree)malloc(sizeof(BiTnode));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询