A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁远帅 中级黑马   /  2015-6-10 08:39  /  960 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int *getA(){
int a=1;
return &a;
}
int *getB(){
int a=malloc(sizeof(int));
Return &a;//success
}
int *getC(){
static int b=2;
return &b;//success
}
在主函数中调用的时候,为什么第一个没法编译通过,第二三个就行呢?

1 个回复

倒序浏览
第一个函数调用完变量就销毁了,你返回的地址就是被系统回收后的地址,这个地址可能已被其他程序使用。

第二个函数采用malloc申请的内存需要手动释放,如果没有手动释放内存就一直存在,所以返回地址可行。但这种情况只申请不释放多的话会造成内在泄漏。

第三个用static修饰的变量会增加生命周期,函数调用完变量还会存在,所以返回地址可行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马