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; 
} 

Als variable sum ist lokal für die Funktion addition so die Variable sollte, sobald die Programmsteuerung bewegt sich aus der Funktion zerstört werden, aber es ist nach wie vor geben die Ausgabe 13. Warum?Wie dieser Codeabschnitt auf die lokale Variable außerhalb der C++ - Funktion zugreifen?

Compiler: g++ 4.8.2 on Ubuntu 14.04 LTS 

Antwort

0

Die variable Summe ist auf dem Stapel. Wenn die Funktion addition() zurückgibt, wird der freigegebene Stapelspeicher nicht auf Null gesetzt, so dass die zurückgegebene Adresse immer noch die Summe enthält.

Funktioniert es immer noch, wenn Sie die Optimierung mit -O3 aktivieren?

+0

Nein, es funktioniert nicht mit dem Optimierungsgrad -O3. Warum? –

Verwandte Themen