C语言 warning:address of stack memory associated with local variable returned
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言 warning:address of stack memory associated with local variable returned,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1453字,纯文字阅读大概需要3分钟。
内容图文
![C语言 warning:address of stack memory associated with local variable returned](/upload/InfoBanner/zyjiaocheng/993/66e55c07197b48b182be4d557bab2390.jpg)
C语言被调函数中使用malloc
今天在做题中碰到了如下情况
在字符串拷贝的被调函数中使用数组声明内存时
return后出现如下warning:
warning: address of stack memory associated with local variable 'str' returned
[-Wreturn-stack-address]
return str;
^~~~
栈区作为动态存储空间
声明为栈区的变量在超出程序块范围后会被自动地释放
Google后发现三种解决方法
0x01
Declare variable(str) as static: static char * str; - this will allocate space for str in the static space and not on the stack.
用到关键字static,将变量声明在静态存储区而不是栈区
0x02
Allocate space in the called function on heap (using malloc, calloc, and friends) and pass the ownership to the caller function, which will have to deallocate this space when not needed anymore (using free).
我采用了此方法并且得到了正确的结果
不过我又又又又发现了问题
如果在一个需要返回值的被调函数中使用了malloc
我应该在什么位置释放申请内存的变量呢?
在return后释放那和没写没有区别
如果在return前释放会不会影响函数的返回呢?(验证后发现没影响。奇怪)
这段知识我掌握的并不好
于是我又Google一下
得到了一些同类问题的回答:
由于程序很简单,虽然在子函数中没有free,确实有内存泄漏的风险,但是整个程序执行完成之后,系统还是会回收malloc申请的str的空间的,因此对于现在的这段程序来说,不会对系统造成负担。子函数到了return,程序就已经结束并返回相关结果了,renturn后面的代码是肯定不会运行了的。
答者还提出了如果非要想free掉,可以这样
0x03
char * function(){
//子函数片段
return str;
}
int main(){
char * p = function();
//主函数
free(p);
return 0;
}
内容总结
以上是互联网集市为您收集整理的C语言 warning:address of stack memory associated with local variable returned全部内容,希望文章能够帮你解决C语言 warning:address of stack memory associated with local variable returned所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。