C语言malloc和free的问题,动态数组的问题
答案:2 悬赏:40
解决时间 2021-04-07 04:04
- 提问者网友:雨之落き
- 2021-04-06 06:52
我的程序是这样的:
#include<stdio.h>
#include<stdlib.h>
main()
{
float *p=(float *)malloc(4*5);
*p=1.1;
*(p+1)=1.2;
*(p+2)=1.3;
*(p+3)=1.4;
*(p+4)=1.5;
*(p+5)=1.6;
printf("%f\n%f\n%f\n%f\n%f\n%f\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5));
free(p);
printf("\n");
printf("%f\n%f\n%f\n%f\n%f\n%f\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5));
}
我故意给*(p+5)赋了值,最后发现是可以的,用free()释放内存后,还是可以输出,如图,表示不解。
最佳答案
- 二级知识专家网友:心痛成瘾
- 2021-04-06 07:30
1. 一般的系统分配内存(即系统分配内存给程序用)是以“页”为单位,页是以KB为单位,所以实际上你程序中申请后可以访问到的内存远比4*5*sizeof(float)大。
2. free实际上没把内存退回给系统,每个程序都有最小的堆栈(这个是不退回给系统的)。在free后如果没有再次用到那段内存,其存的值当然 不变,所以可以读到以前的值。
2. free实际上没把内存退回给系统,每个程序都有最小的堆栈(这个是不退回给系统的)。在free后如果没有再次用到那段内存,其存的值当然 不变,所以可以读到以前的值。
全部回答
- 1楼网友:桑稚给你看
- 2021-04-06 08:23
free()之后,不会立即清0的,这个很正常的,不要纠结这些,记得free就是。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |