中易网

C语言malloc和free的问题,动态数组的问题

答案:2  悬赏:40  
解决时间 2021-04-07 04:04
我的程序是这样的: #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()释放内存后,还是可以输出,如图,表示不解。
最佳答案
1. 一般的系统分配内存(即系统分配内存给程序用)是以“页”为单位,页是以KB为单位,所以实际上你程序中申请后可以访问到的内存远比4*5*sizeof(float)大。
2. free实际上没把内存退回给系统,每个程序都有最小的堆栈(这个是不退回给系统的)。在free后如果没有再次用到那段内存,其存的值当然 不变,所以可以读到以前的值。
全部回答
free()之后,不会立即清0的,这个很正常的,不要纠结这些,记得free就是。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
写出文言句式的类型小题1:渐见愁煎迫(
丽梅发廊地址有知道的么?有点事想过去
淘宝助手里没有数据
结婚不到一个月男方可以要回上车钱吗?
本人左脚有残疾,不能考C1驾照,想考C2驾照,
为什么我的CPU最大频率有时候会超过100% ?
普宁市丰鑫药业公司地址在什么地方,想过去办
辣椒怎么做才辣
多么大啊多么高啊多么长啊翻译英文翻译
关于网上订票在车站大厅退票的问题
“陌逸尘” 是什么意思?有什么含义?
欧泊莱好吗
WIN7系统中PPT只能看,不能修改怎么弄啊?
99伴奏怎样下载
周宁县城关退休干部活动中心站我想知道这个在
推荐资讯
你好,事情是这样的,我家老房子的地契丢了该
thinkpad e520能装360吗...
想买个充气帅哥玩玩,可是不知道该买哪款好,
为什么会想到前男友,明明都分开了,还是自己
流瑜伽是个什么东东,经常练习的话,对身体有
java 实体 获取深层属性 如何设计能避免为nul
迪尼斯酒业怎么去啊,有知道地址的么
推拿按摩室地址在什么地方,想过去办事
电脑显示屏的电源线和电饭锅的电源线是一样的
微能力者徐梦奇谁演的 李思阳演员个人简介
先掉一颗牙 两颗松动 被鉴定成轻微伤 现在是
青海久美藏药店地址有知道的么?有点事想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?