В большинстве управляемых языков (то есть с GC) локальные переменные, выходящие за пределы области действия, недоступны и имеют более высокий приоритет GC (следовательно, сначала будут освобождены).
Теперь C не является управляемым языком, что происходит с переменными, которые выходят за рамки области?
Я создал небольшой тестовый файл в 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;
}
Я использую GCC 4.7.3 для компиляции, а программа выше печатает 17
, почему? И когда/при каких обстоятельствах будут освобождены локальные переменные?