【问题标题】:How this piece of code accessing the local variable outside the C++ function? [duplicate]这段代码如何访问 C++ 函数之外的局部变量? [复制]
【发布时间】:2016-03-22 02:46:34
【问题描述】:
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

【问题讨论】:

    标签: c++ variables scope local


    【解决方案1】:

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

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

    【讨论】:

    • 不,它不适用于 -O3 级别的优化。为什么?
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2021-05-17
    • 2015-03-10
    • 2013-10-08
    • 2020-03-03
    • 2020-10-30
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多