如何理解“函数返回的局部变量或临时变量,其内容是不可预估的、是绝对不安全的”?
引入问题: 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.****.net/topics/394816338