两个函数中的堆栈地址有可能是重合的。即上个函数调用结束,堆栈被释放后,同一个堆栈有可能分配给下一个函数调用。
#include <stdio.h>
void a()
{
int i=0;
printf("%x\n",&i);
volatile int array[10];
for (i = 0; i < 10; i++)
array[i] = i;
}
void b()
{
int i=0;
printf("%x\n",&i);
int array[10];
for (i = 0; i < 10; i++)
printf("%d ", array[i]);
}
int main()
{
a();
b();
}
~
编译输出:
参考: