为啥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: 偷鸡不成蚀把米
应该叫脱裤子放屁
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。