-1

可能重复:
可以在其范围之外访问局部变量的内存吗?
为什么这个函数返回垃圾值

为什么这个简单的代码会返回垃圾?

char *output()
{
    char o[2] = "A";
    return o;
}

int main()
{
    std::cout << output(); 
}
4

2 回答 2

4

因为你返回一个指向无效内存的指针——返回o时被破坏output

你有几个选择:

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

PS当然,你可以使用std::string,你不会有这个问题。或使用输入/输出参数,而不是返回。

于 2012-10-10T07:05:38.860 回答
0

o 是的局部变量,output()因此它仅在函数内部具有作用域和生命周期。并且当函数返回一个内存地址时,它被删除的内存地址被返回。

如果它是返回的值,则由于“按值返回”方法,程序将可以工作。

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

于 2012-10-10T07:11:14.287 回答