首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

函数的局部变量二

2014-01-05 
函数的局部变量2#include stdio.h#include malloc.hstruct my{int a}struct my *f0(){struct my *tm

函数的局部变量2
#include <stdio.h>
#include <malloc.h>

struct my
{int a;};

struct my *f0()
{struct my *tmp;
 tmp = (struct my *)malloc(sizeof(struct my));
 tmp->a = 3;
 return tmp;
}

void main()
{
struct my *tmpp;
tmpp = f0();
printf("%d",tmpp->a);
}
以上代码函数f0返回了一个指针,这个指针指向一个被调用函数内分配的一段内存。我想问的是返回主函数后这段内存会不会因为局部变量的问题被撤销?
还有个同类问题请看
http://bbs.csdn.net/topics/390672765
这两个问题是否有区别?
[解决办法]
你这段代码不会。虽然内存是在函数f0中申请的,但是申请的内存指针,你赋给了main函数中的tmpp,从f0函数返回后,里面的局部变量tmp是不能用了,但是你赋值给了tmpp,tmpp是可以用的,而且malloc申请的内存在堆里,你没有用free释放,因此还存在,内存可指针都在,因此使用没有问题。
而你所说的另一个同类问题,是局部变量(虽然是结构),你返回了局部变量的指针给main函数中的指针,没错,这个指针还是指向之前那个内存位置,但是函数返回后,局部变量就被释放了,由可能被其它进程使用了,因此你打印出来的值是未知的。
区别就是:malloc申请的内存在堆,局部变量在栈,作用范围不一样。

热点排行