C语言中malloc和free的问题

int *intPointer = (int *)malloc(3 * sizeof(int));

intPointer[0] = 1;
intPointer[1] = 2;
intPointer[2] = 3;

printf("before free :%ld\n",intPointer);

free(intPointer);

printf("after  free :%ld\n",intPointer);
printf("%d\t%d\t%d\n",intPointer[0],intPointer[1],intPointer[2]);

输出结果:
before free :4296037472
after free :4296037472
1 2 3

疑问:free(intPointer)之后,为什么还能通过intPointer访问malloc分配的那片内存?

举个例子来说,如果有个人经常问你借一样东西:
对这个东西的处理方法有两种:
(1)他不停地借、还,耗时,效率低。
(2)让他借一次,等他的确不用的时候再还,但是在他没还之前,别人就不能用了。
malloc就是借内存,free就像是还内存
操作系统为了提高效率,就采用了第(2)处理办法,反正操作系统可以搞到很多内存。
free可以理解为“假还”,东西还在你那里,但是你不应该继续使用了,应该去借。
对于部分操作系统,free之后是把intPointer[0].....的值给删除了、部分不是。
另外提一句:
free之后要,intPointer = NULL;
理解万岁!!!

写程序时用malloc竟然出现段错误,而且明显那块没有用错,肯定是别的地方有内存泄漏的问题,导致最后内存泄漏了。需要好好查一查原因了。但程序中很多地方都用来malloc,内存全是随便用的,要改起来估计十分麻烦。。。。
    
  下面找了点malloc与free的介绍,先看......
答案就在这里:C语言中malloc与free
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

free后,指针不可用,但是再次分配了,如果不分配,访问会出错

free函数只是释放了你对那片空间的使用权。调用free函数之后其它程序就可以访问这段内存空间了。

before free :5592120
after free :5592120
-17891602 -17891602 -17891602
这是我用你的代码的输出结果,所以应该不存在你说的那个问题

#include
#include

int main(void)
{
int *intPointer = (int *)malloc(3 * sizeof(int));

intPointer[0] = 1;
intPointer[1] = 2;
intPointer[2] = 3;

printf("before free :%ld\n", intPointer);

free(intPointer);

printf("after  free :%ld\n", intPointer);
printf("%d\t%d\t%d\n", intPointer[0], intPointer[1], intPointer[2]);

system("pause");

}


free只是通知内存分配器释放这部分内存空间,但是还是有可能恰巧还能让你访问到,但这种行为是未知的,可能引起各种错误

free(intPointer)只是告诉操作系统这段内存可以被申请了,这段内存内容并未因此消失,黑客可以利用这个进行内存攻击,安全要求较高的代码需要重新对这段内存清空,一般就是写零值

忘了说,指针就是一个内存索引值,通过这个值可以访问指定位置的内存内容,所以你会获取到相同的内容,如果把指针值重置,则结果是未知的