非常简单C++基本代码

Very simple C++ basic code

本文关键字:代码 C++ 简单 非常      更新时间:2023-10-16

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

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

char *output()
{
    char o[2] = "A";
    return o;
}
int main()
{
    std::cout << output(); 
}

因为您返回指向无效内存的指针 - o在返回时output被销毁。

您有以下几种选择:

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

附言当然,您可以使用std::string,并且不会遇到此问题。或者使用 in/out 参数,而不是返回。

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

如果它是返回的值,则由于"按值返回"方法,程序将正常工作。

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