这段代码如何访问C++外部的局部变量

How this piece of code accessing the local variable outside the C++ function?

本文关键字:C++ 访问 局部变量 外部 段代码 代码 何访问      更新时间:2023-10-16
int * addition(int arr[])
{
    int sum=0;
    for(int i=0;i<4;i++)
    sum+=arr[i];
    return &sum;
}
int main()
{
    int arr[4]{1,3,4,5}, * ptr=addition(arr);
    cout<<*ptr<<endl;
    return 0;
}

由于变量sum是函数addition的局部变量,因此一旦程序控件移出函数,它仍然提供输出13,就应该销毁变量。为什么?

Compiler: g++ 4.8.2 on Ubuntu 14.04 LTS

变量 sum 位于堆栈上。当函数 addition(( 返回时,它不会将释放的堆栈内存归零,因此返回的地址仍然包含总和。

如果使用 -O3 启用优化,它仍然有效吗?