可能重复:
Can a local variable's memory be accessed outside its scope?返回局部变量的地址
我试图理解为什么我得到这个输出下面的程序
[hello] [0xbfde68f4]
[world] [0xbfde68f4]
[world] [0xbfde68f4]
程序是
int main(void)
{
char **ptr1 = NULL;
char **ptr2 = NULL;
ptr1 = func1();
ptr2 = func2();
printf(" [%s] [%p]\n",*ptr1, (void*)ptr1);
printf(" [%s] [%p]\n",*ptr2, (void*)ptr2);
printf(" [%s] [%p]\n",*ptr1, (void*)ptr1);
return 0;
}
char** func1()
{
char *p = "hello";
return &p;
}
char** func2()
{
char *p = "world";
return &p;
}
我明白,返回局部变量的地址不是一个好习惯,但这只是一个实验。
你不了解什么? – 2012-08-09 04:24:36
为什么内存地址相同?为什么ptr1会失去价值? – John 2012-08-09 04:26:16
没有什么特别的原因,他们是一样的。他们恰好是。这只是平局的运气。至于为什么'ptr1'失去了价值,这是因为系统在释放后重新使用该内存来达到其他目的。 – 2012-08-09 04:26:48