非常简单的C ++基本代码

时间:2012-10-10 07:04:43

标签: c++

  

可能重复:
  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(); 
}

2 个答案:

答案 0 :(得分:4)

因为你返回一个指向无效内存的指针 - o返回时会销毁output

您有几种选择:

  • 动态分配内存(使用malloc),将"A"复制到此内存并返回其地址
  • 直接返回字符串文字:return "A";

P.S。当然,您可以使用std::string,但您不会遇到此问题。或者使用输入/输出参数,而不是返回。

答案 1 :(得分:0)

o是output()的局部变量,因此它只在函数内部具有范围和生命周期。并且当函数返回一个内存地址时,将返回已删除内存的地址。

如果它是返回的值,那么由于“按值返回”方法,程序将起作用。

如果您需要正确的输出而不是默认的内存说明符auto,则需要使用其他内容,例如staticextern内存分配或动态内存分配。