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

böylece değişken kısa sürede fonksiyon dışı program kontrol hamle olarak imha edilmelidir ama yine de çıkış 13 veriyor fonksiyonu addition için yerel. Niye ya?C++ işlevinin dışındaki yerel değişkene bu kod nasıl erişiyor? Değişken <code>sum</code> gibi

Compiler: g++ 4.8.2 on Ubuntu 14.04 LTS 

cevap

0

Değişken toplamı yığın üzerindedir. Function addition() işlevi geri döndüğünde, yayınlanan yığın hafızasını sıfırlamaz, böylece geri gönderilen adres toplamı içerir.

-O3 ile optimizasyonu etkinleştirirseniz hala çalışır mı?

+0

Hayır, -O3 seviye optimizasyonu ile çalışmıyor. Niye ya? –