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

时间:2016-03-22 02:46:34

标签: c++ variables scope local

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

1 个答案:

答案 0 :(得分:0)

变量sum在堆栈上。当函数addition()返回时,它不会释放已释放的堆栈内存,因此返回的地址仍包含总和。

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