¿C reutilizará la memoria de un bloque local var una vez que salga del alcance?

(Creo que esta pregunta es técnicamente distinta de¿Se puede acceder a la memoria de una variable local fuera de su alcance? porque es C en lugar de C ++.)

Sé que en C puede poner una variable local en un bloque y se definirá en ese bloque:

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

Mi pregunta es, ¿aún es SEGURO usar esa memoria hasta el final de la función? Si es SABIO desde la perspectiva de las prácticas de diseño / codificación es una pregunta separada, pero ¿es un comportamiento indefinido o puedo contar con que la memoria se quede? Por ejemplo:

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

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta