在我看来,块中的自动变量在跳转到外部作用域后会被释放。然后我写了一个程序来测试这个,令我惊讶的是,它运行正常。它甚至跑了好几次。从块外部访问块内的自动变量的内存?
的程序是:
#include <stdio.h>
int main(int argc, char **argv)
{
int *a = 0;
{
int b = 2;
a = &b;
}
printf("%d\n", *a);
return 0;
}
打印结果是2,怎么会出现这种情况?
该内存仍然存在,它只会被下一个函数调用或块范围破坏。它就像在释放堆分配块之后从内存中读取数据一样。你不能指望它的工作,但有时它确实。 – woolstar
简单,你很幸运。内存被标记为“空闲”,但不会“释放”,因为除非有人要求,否则不需要这样做。 –
就像这个人住在地板上给你一台电脑,即使那个人搬出去了,你家里仍然有电脑 – Rugal