Seven You 2015-09-15 07:02 采纳率: 100%
浏览 2128
已采纳

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分配的那片内存?

  • 写回答

8条回答 默认 最新

  • shangguanyuanxia 2015-09-15 07:53
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序