Kann eine lokale variable den Speicher zugegriffen werden, die außerhalb Ihrer Reichweite?

Ich habe den folgenden code.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}

Und der code ist nur im Betrieb mit keine runtime-Ausnahmen!!!

Wurde die Ausgabe 58

Wie kann es sein? Ist nicht die Erinnerung an eine lokale variable unzugänglich außerhalb seiner Funktion?

das wird nicht mal kompilieren, wie Sie ist; wenn Sie fix die nonforming business, gcc noch warnen address of local variable ‘a’ returned; valgrind zeigt Invalid write of size 4 [...] Address 0xbefd7114 is just below the stack ptr
Zurück in meiner Jugend arbeitete ich einmal auf einige ein bisschen tricky null-ring-code ausgeführt, der auf dem Netware-Betriebssystem, dass die beteiligten geschickt bewegen Sie den stack-pointer in einer Weise, die nicht genau sanktioniert durch das Betriebssystem. Ich würde wissen, wenn ich einen Fehler gemacht, weil oft der Stapel würde bis Ende, wobei am Bildschirm Gedächtnis und ich konnte zusehen, wie die bytes geschrieben wird rechts auf dem display. Sie können nicht Weg mit dieser Art der Sache in diesen Tagen.
lol. Ich musste Lesen die Frage und einige Antworten, bevor ich überhaupt verstanden wo das problem ist. Ist das eigentlich eine Frage, über die variable access-Bereich? Sie verwenden nicht einmal 'ein' außerhalb Ihrer Funktion. Und das ist alles dort ist zu ihm. Werfen um einige Speicher-Referenzen ist ein ganz anderes Thema aus dem Geltungsbereich von Variablen.
Dupe Antwort bedeutet nicht, dass dupe in Frage. Viele der dummen Fragen, die Menschen, die hier vorgeschlagen sind ganz andere Fragen, die zufällig beziehen sich auf die gleiche zugrunde liegende symptom... aber der Fragesteller hat, wissen, wissen, so dass Sie offen bleiben sollen. Ich Schloss eine ältere dupe und fusionierte Sie in dieser Frage, die offen bleiben sollte, weil es eine sehr gute Antwort.
Wenn die Antwort hier ist gut, es sollte zusammengeführt älteren Fragen, von denen dies ist ein dupe, nicht die andere Weise herum. Und dies Frage von ist in der Tat ein dupe von den anderen Fragen, die hier vorgeschlagen wird und dann einige (auch wenn einige der vorgeschlagenen sind eine bessere Passform als andere). Beachten Sie, dass ich denke, Eric ' s Antwort ist gut. (In der Tat, ich markiert dieser Frage für Sie die Zusammenführung der Antworten in eine der älteren Fragen, um zu retten den älteren Fragen).

InformationsquelleAutor |

Schreibe einen Kommentar