2016-03-22 7 views
0
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; 
} 

はそう変数は、すぐに機能のうちプログラム制御の移動に伴って破壊されなければならないが、それはまだ出力13を与えている機能additionに対してローカルです。どうして?C++の外部でローカル変数にアクセスするこのコードはどのように機能しますか?変数<code>sum</code>として

Compiler: g++ 4.8.2 on Ubuntu 14.04 LTS 

答えて

0

可変合計はスタックにあります。関数addition()が返されると、解放されたスタックメモリはゼロにならないので、返されるアドレスには合計が含まれます。

-O3で最適化を有効にしても機能するのですか?

+0

いいえ-O3レベルの最適化では機能しません。どうして? –

関連する問題