可能重复:
Can a local variable's memory be accessed outside its scope?
why does this function return garbage value
为什么这个简单的代码会返回垃圾?
char *output()
{
char o[2] = "A";
return o;
}
int main()
{
std::cout << output();
}
答案 0 :(得分:4)
因为你返回一个指向无效内存的指针 - o
返回时会销毁output
。
您有几种选择:
malloc
),将"A"
复制到此内存并返回其地址return "A";
P.S。当然,您可以使用std::string
,但您不会遇到此问题。或者使用输入/输出参数,而不是返回。
答案 1 :(得分:0)
o是output()
的局部变量,因此它只在函数内部具有范围和生命周期。并且当函数返回一个内存地址时,将返回已删除内存的地址。
如果它是返回的值,那么由于“按值返回”方法,程序将起作用。
如果您需要正确的输出而不是默认的内存说明符auto
,则需要使用其他内容,例如static
或extern
内存分配或动态内存分配。