2016-07-17 15 views
0

Wenn ich richtig verstehe, sollen Variablen, die nicht dynamisch zugeordnet sind, am Ende ihres Bereichs gelöscht werden. Allerdings wollte ich es versuchen, mit diesem Code aus (was meiner Meinung nach nicht korrekt ist, wie soll ich die dynamische Zuordnung verwenden):C++ - Bereiche und Zuordnung

int* function() 
{ 
    int a = 3; 
    return &a; 
} 

int main(int argc, char const *argv[]) { 
    int* a(function()); 
    std::cout << *a << std::endl; // prints 3 
} 

Warum kann ich immer noch den Wert der eine Variable zugreifen, indem die Verwendung von Zeiger zurückgegeben von der Funktion, wenn es nicht mehr existieren soll?

Antwort

0

a und daher der Rückgabewert von function ist nicht mehr im Geltungsbereich. Du hast nur Glück.

Seien Sie vorsichtig und kompilieren Sie mit allen Warnungen aktiviert - und beachten Sie diese Warnungen.

+1

Eigentlich ist er ** sehr unglücklich **, dass der Code nicht sofort abstürzte. – WhiZTiM

+0

... Hängt davon ab, wie du die Welt siehst –

+0

Was meinst du mit Glück? Es scheint jedes Mal zu funktionieren – MaxV37

0

Die Tatsache, dass Sie auf den Wert zugreifen können, ist pures Glück. Der Code hat ein undefiniertes Verhalten (da die Variable zerstört ist) und der Compiler kann erzeugen, was er will - aber Sie können sich nicht darauf verlassen.