int* func()
{
int* p = (int*)malloc(10);
printf("%p\n",p);
*p = 10;
free(p);
printf("%d\n\n",*p);
return p;
}
int _tmain(int argc, _TCHAR* argv[])
{
int* a = func();
printf("%p\n",a);
*a = 20;
printf("%p\n",a);
printf("%d\n\n",*a);
//free(a);//如果这里再次free 就会出现问题
return 0;
}
result:
00371B0
-17891602
00371B0
00371B0
20
问题:实际上func()中分配的内存已经在出func()的时候就释放了。当func()把已经释放的内存地址给指针a了, 然后*a再次被赋值,但是此时a指向的内存00371B0已经被释放了啊~~!!那么*a的值20是存在那里的?
如果我再次free(a)就出错了,因为00371B0指向的内存已经释放了。
请那位高人为小弟解释一下?? |