gpt4 book ai didi

c++ - 内存分配困惑

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:11 26 4
gpt4 key购买 nike

我创建了一个类 A 并编写了以下函数 foo()

class A
{
public:
int a;
};

A * foo()
{
A a1;
return &a1;
}

int main()
{
A * a2;
a2 = foo();
return 0;
}

编译器给了我一个警告,因为 a1 是一个局部变量,我从堆栈中返回它的地址(因此它的值可能会发生不可预测的变化)。

现在我将 foo() 更改为以下内容

A * foo()
{
A a1;
A *a3;
a3 = &a1;
return a3;
}

现在编译器不会给出任何警告。这是因为 a3 是在堆上创建的吗?如果是这样,指针总是像这样在堆上创建。我认为堆只能通过 new/malloc 使用。

最佳答案

Now the compiler does not give any warning.

编译器没有给出任何警告,因为您已经添加了足够的复杂性来欺骗它对您的代码所做的分析。

您仍然返回一个指向局部变量的指针,并且在函数返回后您不能使用该指针。

关于c++ - 内存分配困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3357777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com