这段代码如何访问C++函数外的局部变量?
How this piece of code accessing the local variable outside the C++ function?
int * addition(int arr[])
{
int sum=0;
for(int i=0;i<4;i++)
sum+=arr[i];
return ∑
}
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
变量和在堆栈上。当函数 addition() returns 它不会将释放的堆栈内存清零,因此返回的地址仍然包含总和。
如果使用 -O3 启用优化,它仍然有效吗?
int * addition(int arr[])
{
int sum=0;
for(int i=0;i<4;i++)
sum+=arr[i];
return ∑
}
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
变量和在堆栈上。当函数 addition() returns 它不会将释放的堆栈内存清零,因此返回的地址仍然包含总和。
如果使用 -O3 启用优化,它仍然有效吗?