Wird C den Speicher eines lokalen Blocks var wieder verwenden, sobald er den Gültigkeitsbereich verlässt?

(Ich glaube, diese Frage unterscheidet sich technisch vonKann auf den Speicher einer lokalen Variablen außerhalb ihres Gültigkeitsbereichs zugegriffen werden? weil es C statt C ++ ist.)

Ich weiß, dass Sie in C eine lokale Variable in einen Block einfügen können, die auf diesen Block beschränkt ist:

#include <stdio.h>
int main() {
    {
        int x = 5;
        printf("x = '%d'\n", x);
    }
    // can't see x anymore
}

Meine Frage ist, ist es trotzdem noch SICHER, diesen Speicher bis zum Ende der Funktion zu verwenden? Ob es WISE aus Sicht der Design- / Codierungspraktiken ist, ist eine andere Frage, aber ist es undefiniertes Verhalten, oder kann ich mich darauf verlassen, dass dieser Speicher erhalten bleibt? Beispielsweise

#include <stdio.h>
int main() {
    int *ptr;

    {
        int x = 5;
        printf("x = '%d'\n", x);

        // hold on to a ptr while we still know the address
        ptr = &x;
    }

    // can't see x anymore, but is this safe?
    printf("still have a ptr! '%d'\n", *ptr);
}

Vielen Dank

Antworten auf die Frage(8)

Ihre Antwort auf die Frage