指针p被free之后变成了什么值,还有值吗?

#include<stdio.h>#include<stdlib.h>intmain(){int*p;inta=10;p=(int*)malloc(sizeof(int)... #include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
int a = 10;
p = (int *)malloc(sizeof(int)* 3);
p[0] = 1; p[1] = 2; p[2] = 3;
p++;
p[0] = 4;
free(p - 1);
printf("%d",a);
system("pause");
return 0;
}

请问这个程序在执行free(p-1)之后不是被清空了吗?怎么还有0x003a8fdc这个地址,谢谢
展开
 我来答
hwl88618
推荐于2017-09-18 · TA获得超过508个赞
知道小有建树答主
回答量:346
采纳率:0%
帮助的人:288万
展开全部
地址是不可能被删掉的,free只是告诉系统,这块内存不需要了,系统可以拿来做别的事。这块内存被释放之后暂时还没有其他程序访问这块内存,所以之前的数据还在,读也能读出来,但这样是不安全的,这次是这个结果,下一次就不一定了。c要求严谨,释放之后的内存就不要再用了
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
卑躬屈膝的人生
2014-12-23 · 超过27用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:39.2万
展开全部
地址没清空呀,地址的值肯定存在的,free只是把堆地址标记的内存标记为无效而已,表示能被操作系统回收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JamToby
2014-12-23 · 超过20用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:46.8万
展开全部
free的功能:释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。
就是说free掉以后,可以这段内存就可以被再分配,但是不会清空内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式