如何理解“函数返回的局部变量或临时变量,其内容是不可预估的、是绝对不安全的”?

 

引入问题: VS2015 C++ 函数中的 局部变量,调用完函数后局部变量的值是否不再存在?

 

 

 

困惑:

method() 函数中 数组outbuff[50]是个局部变量,在主函数调用完method() 函数后,数组outbuff[50] - 这个局部变量存放在栈区应该自动释放掉的,释放之后它存储的值应该是混乱的, 为什么在主函数中却能够访问到正确的值?向各位 求助,提前谢谢了。

 

解决问题:

先了解下函数流程:

 

 

 

因此,综合具体代码来看:

对于printf_s("%s\n", a); 因为a是在局部变量outbuff[50]没有被修改之前strcpy()过来的,所以能够正确得到结果;

对于printf_s("%s\n", b); 调用printf_s时,该函数内部对局部变量进行初始化,局部变量outbuff[50]中的值被编译器进行默认的初始化修改, 所以会输出编译器默认初始化的字符串。

那么子函数中返回局部变量的做法是否正确呢?答案是绝不对可以的!因为这样做就造成返回的局部变量其内容是不可预估的。

 

 

更多,可参考我的贴子:

https://bbs.csdn.net/topics/394816338

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章