在大多数托管语言(也就是带有垃圾收集器的语言)中,超出作用域的本地变量将无法访问,并且具有更高的垃圾收集优先级(因此,它们将首先被释放)。由于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
,这是为什么?在什么情况下会释放局部变量?
gcc 4.7.3
尚未发布。这必须是一个4.7.3
预发布版。 - ouah