#include "stdio.h" int *p = NULL; int *fFun(void) { int i = 0;//i要被销毁掉,i的值为多少没有关系。 return &i; } void subFun(void) { (*p)--; } void gFun(void) { int j; for(j = 0;j<10;j++) { subFun(); printf("%d/n",j); } } int main(void) { p = fFun(); gFun(); }在主程序中,当程序执行完fFun之后,i做为局部变量是存放于栈上的,将i的地址返回给p;然后i出栈。进入gFun,gFun内有一个局部变量j,就入栈,占用刚才i占用的位置(这个不一定,根据编译器不同而不同)。则p指向j。执行第一次循环,j=0,即*p=0;执行subFun,(*p)--,则*p=-1,同时j=-1,然后打印输出,然后j++,则j=0,这样*p=0;执行subFun之后j=-1,再次打印输出。这样始终满足j<10的条件,所以系统进入死循环。
引用局部变量地址
最新推荐文章于 2022-05-31 21:55:43 发布