读书人

还是不明白 这个函数为什么能返回局

发布时间: 2012-02-22 19:36:56 作者: rapoo

还是不明白, 这个函数为什么能返回局部指针?
NLISTPTR new_nlist(char *str)
{
NLISTPTR newptr;

if (sizeof(newptr-> string) < strlen(str))
{
if (verbose)
fprintf(stderr, "[new_nlist] %s\n ",msg_big_one);
}
if (( newptr = malloc(sizeof(struct nlist))) != NULL)
{
strncpy(newptr-> string, str, sizeof(newptr-> string));
newptr-> next=NULL;
}
return newptr;
}
难道malloc出来的可以这样用?


[解决办法]
malloc之后空间在那了,返回指针之后还是能操作的,malloc的空间一定要free才能释放

如果局部变量是一个类似int[]这样的,则会自动销毁,也就无法返回了
[解决办法]
malloc的是堆内存,不是栈
栈内申请的空间,函数结束时就会失效;而堆内存不会,需要你自己来释放的,否则会造成内存泄漏

读书人网 >C语言

热点推荐