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
答案 0 :(得分:0)
变量sum在堆栈上。当函数addition()返回时,它不会释放已释放的堆栈内存,因此返回的地址仍包含总和。
如果使用-O3启用优化,它是否仍然有效?