linux malloc 返回指针不可用,为啥malloc后得到的指针不可以free  ??? 谢谢  [已解决]...

为啥malloc后得到的指针不可以free  ??? 谢谢  [已解决]

(2012-04-13 01:52:33)

标签:

杂谈

为啥malloc后得到的指针不可以free ??? 谢谢 [已解决]typedef struct NODE

{

struct NODE* next;

int value;

} node;

node *alloc_node()

{

node *n;

return n=(node *)malloc(sizeof(node)) ? n : NULL;

节点,然后检查是否为NULL,分配成功的内存应该在堆上,而不是栈上

}

int main(void)

{

node *head=NULL;

//head=(node *)malloc(sizeof(node));

head=alloc_node();

assert(head != NULL);<

请教一个cgi的页面显示问题。br />

memset(head,0,sizeof(head));

head->value=45;

free(head);

return 0;

}

这里的malloc和free很让小弟迷惑,请高手解释一下,万分感谢。

[ 本帖最后由 rocky1972 于 2007-12-19 11:18 编辑

]>>return n=(node

*)malloc(sizeof(node)) ? n : NULL;

这句代码你得再琢磨琢磨了.return (n=(node *)malloc(sizeof(node))) ? n :

NULL;

优先级条件运算符http://www.jane1.com/的优先级比赋值运算符高:luya: 偷鸡不成蚀把米原帖由

anthony1983 于 2007-12-19 10:53 发表

http://bbs.chinaunix.net/images/common/back.gif

:luya: 偷鸡不成蚀把米

return ( n=(node *)malloc(sizeof(node)) )? n : NULL;

改成这样的就可以了。

[ 本帖最后由 rocky1972 于 2007-12-19 11:03 编辑 ]直接return (node

*)malloc(sizeof(node)) 不就行了么原帖由 Wind-Son 于 2007-12-19 11:03 发表

http://bbs.chinaunix.net/images/common/back.gif

直接return (node *)malloc(sizeof(node)) 不就行了么

所以楼上的兄弟说偷鸡不成蚀把米

return n=(node *)malloc(sizeof(node)) ? n : NULL;

这句话先执行的是(node *)malloc(sizeof(node))

,这句话一般都会成功的,所以返回非0值,即为真。于是返回的是n的值。

原因就在这,n是在alloc_node 的frame栈中,alloc_node

返回后就释放了n的内存,所以main中再free就傻了。

哎,今天早上真不该和女朋友吵架。

谢谢楼上的兄弟们http://www.zuwangtang.com:

converse

ldy2534

cugb_cat

anthony1983回复 #8 rocky1972 的帖子优先级感觉太麻烦了,还有以后就得记得用括号来强化自己的意图。原帖由

anthony1983 于 2007-12-19 10:53 发表

http://bbs.chinaunix.net/images/common/back.gif

:luya: 偷鸡不成蚀把米

应该叫脱裤子放屁

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值