O que acontece quando uma variável sai do escopo?

Na maioria das linguagens gerenciadas (isto é, aquelas com um GC), as variáveis ​​locais que saem do escopo são inacessíveis e têm uma prioridade maior de GC (portanto, elas serão liberadas primeiro).

Agora, C não é uma linguagem gerenciada, o que acontece com variáveis ​​que saem do escopo aqui?

Eu criei um pequeno caso de teste em C:

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

    {
        // New scope
        int tmp = 17;
        ptr = &tmp; // Just to see if the memory is cleared
    }

    //printf("tmp = %d", tmp); // Compile-time error (as expected)
    printf("ptr = %d\n", *ptr);

    return 0;
}

Estou usando o GCC 4.7.3 para compilar e o programa acima imprime17, porque? E quando / sob quais circunstâncias as variáveis ​​locais serão liberadas?

questionAnswers(3)

yourAnswerToTheQuestion