局部变量的释放
板凳宽 2008-06-16 02:38:53 程序如下:
char* getstring(void)
{
char array[] = "hello world";
return array;
}
int main(void)
{
char* str = getstring();//breakpoint 1
printf("%s",str)//breakpoint 2
return 0;
}
hi all,在不考虑上面程序的功能情况下,个人想问的就是:debug状态下,上面程序执行到breakpoint 2的时候,按照,局部变量(当然是指非静态的)在函数执行完毕后就会被释放掉的说法,此时,此前array在stack里分配的内存单元应该被释放掉了,但是memory里的内容还是hello world,但在执行printf函数中就会释放掉,这个怎么解释?望大虾解答..不胜感激...
个人愚见就是:下一次需要用到stack分配内存的时候,才会释放上一次stack分配的.(详见下面程序)
char* getstring(void)
{
char array[] = "hello world";
return array;
}
int main(void)
{
char* str = getstring();//breakpoint 1
static a;
a = 10; //breakpoint 2
printf("%s",str)//breakpoint 3
return 0;
}
由于a是静态变量,在静态存储区分配内存,所以执行完语句a = 10; stack里array的内容还没释放掉...