- 论坛徽章:
- 0
|
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *place=(int *)malloc(10*sizeof(int));
int i=0,*temp;
if(place==NULL)
exit(0);
else
printf ("NOT initial value:%2d\n",*(place+1));
for(i=0;i<10;i++)
*(place+i)=i+10;
printf ("NOT FREE VALUE:%2d\n",*(place+1));
temp=place;
free(place);
printf ("i VALUE:%2d\n",i);
place=NULL;
printf ("FREE VALUE:%2d\n",*(temp+1));
}
在GNU下编译结果是:
NOT initial value: 0
NOT FREE VALUE:11
i VALUE:10
FREE VALUE:11
理论上说既然free以后,temp指向的空间就被释放了,内容是无效的,但是为什么free后temp+1地址的值还是11, 但是地址temp的值却被清零.
但是在WINDOWS下编译却是合理的(free后的值明显无效). |
|