C reutilizará a memória de um bloco local var assim que ficar fora do escopo?

(Creio que esta questão é tecnicamente distinta deA memória de uma variável local pode ser acessada fora de seu escopo? porque é C em vez de C ++.)

Eu sei que em C você pode colocar uma variável local em um bloco e ele terá um escopo definido para esse bloco:

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

Minha pergunta é: ainda é seguro usar essa memória até o final da função? Se o WISE é do ponto de vista de práticas de design / codificação é uma questão separada, mas é um comportamento indefinido ou posso contar com a permanência da memória? Por exemplo:

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

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion