c语言malloc格式,c语言中的malloc

今天想去练习一下二叉树的使用的,使用前就必须要创建一个二叉树啊。我用的是前序式的创建方法,都是通过调用子函数createtree来创建一个树(先创建根->左孩子->右孩子),是通过递归的方法的。但是当我测试的时候,每次访问树根的都会出错,原来创建的二叉树根本就没有保存在主函数的head中,我用单步调试发现malloc有问题,没有达到我想要的效果。我是知道malloc在进程结束前都不会自动free掉malloc分配的内存的,那为什么我申请的内存却没有返回到主函数中呢?

#include

#include

typedef struct _tree

{

char data;

struct _tree *lchild;

struct _tree *rchild;

}bittree;

int createtree(bittree *head)

{

char data;

fscanf(stdin,"%c",&data);

getchar();

if('#' == data)

{

//*head = NULL;

}

else

{

head = (bittree*)malloc(sizeof(bittree));

if(head == NULL) exit(0);

head->data = data;

head->lchild = NULL;

head->rchild = NULL;

createtree(head->lchild);

createtree(head->rchild);

}

return 1;

}

int main()

{

bittree *head = NULL;

createtree(head);

puts("ok!");

printf("root lchild data = %c\n",head->lchild->data);

return 1;

}

上面是错误的代码的,出错的地方是在函数调用的时候我传的是*head ,我的最大的失误就是以为传的是指针,在子函数中修改什么都能保存的。而忘记了只是修改指针指向的地址单元被修改了才会被保存,而起传递的指针本身被修改时不会被保存的,因为传的指针本身就是相当于值传参,而不是传地址。因此若要想保存在子函数中malloc中的指针就必须要使用一个指针来保存,而在子函数想保存指针当然使用的是指针的指针的(当然也可以将指针返回也是可以的)。因此该代码想要正确的话就必须传的是&head,而不是head这么简单了。正确的代码是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值