社区
C语言
帖子详情
malloc申请的内存free后为什么还可以访问呢?
blueandblue
2006-04-14 09:07:31
如下面的代码
main()
{
int* i=(int*)malloc(sizeof(int));
*i=12;
free(i);
printf("%d\n",*i);
}
我想测试free的功能,虽然已经free了,但结果输出还是12,这是为什么呢?
...全文
596
23
打赏
收藏
malloc申请的内存free后为什么还可以访问呢?
如下面的代码 main() { int* i=(int*)malloc(sizeof(int)); *i=12; free(i); printf("%d\n",*i); } 我想测试free的功能,虽然已经free了,但结果输出还是12,这是为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tianyanzjq
2006-04-15
打赏
举报
回复
最好是添加上i=NULL;也就是说无论是free还是delete之后,都要让指针空.
pengcyu
2006-04-15
打赏
举报
回复
malloc申请的,请坚决用delete释放。
new深情的,请坚决用free释放。
哇,难道我学的一直是错的,书上的都错了?
blueandblue
2006-04-14
打赏
举报
回复
谢谢各位,我自己又找了一下,问题已经基本明白,我原来只是想弄明白free后系统到底做了什么,本来以为free后系统应该将该区域的数值置空,并禁止别人再次访问访区域,看来实际情况有点差异,现实情况是:系统只是将该区域标志为可再次使用而矣。
dsygr520yy
2006-04-14
打赏
举报
回复
看jjhou的书吧 赫赫
还有 把菜菜鸟拖出去重打30大板。
搞得我眼镜掉在地板上了,幸好有地毯。。。
yinqing_yx
2006-04-14
打赏
举报
回复
野指针撒 指到那里都是可能的~~~~~~~~~~~~
malloc(...)
free(...)
...=NULL;
晨星
2006-04-14
打赏
举报
回复
是啊,本来就是个简单的道理。
free的意思只是告诉系统:“我不要了”,除此之外没有任何别的意思,如果你理解成“我不要了,你锁起来吧”,那就是你误会了,free没那么我含义的。
如果你都说了不要了,还去访问,那不是你自己不厚道么?:)
Mypiger
2006-04-14
打赏
举报
回复
你住的房子卖了,如果你的买家没把锁换了,你还是可以开门进去!
如果换了你还要硬进去,你就危险了,可能你会被当左贼!
hazuki9902
2006-04-14
打赏
举报
回复
这里用free"释放"的意思是不是说该位置的内存可以供别的程序用,而并不是说该内存中的数据已经被销毁?就象平时malloc后发现申请的内存里有数据一样?
新手,学习...
anguofeng
2006-04-14
打赏
举报
回复
不好意思是i=NULL
anguofeng
2006-04-14
打赏
举报
回复
其实楼主你这样释放的并不完全
完全的释放是free以后还要把指针赋空的
比如*i=NULL;
chenming0321
2006-04-14
打赏
举报
回复
晕哦,
你用vc7,运行看看!!
iamcaicainiao
2006-04-14
打赏
举报
回复
让我神经都紧张了@@
---------------------------------------------------------------------------------
抱歉抱歉,一边跟pp女同事聊天,一边打字的,结果就错了,看来还是要专心啊。呵呵。
iamcaicainiao
2006-04-14
打赏
举报
回复
就是i是个地址,内存释放之后,那块内存自由了,但你的i此时,你没有赋值为NULL,所以它仍然指向那块内存(也许是随机的其他内存块?)。这样访问仍然是可以得了,但输出的未必就是12了,所以很危险。
只见烟火飞扬
2006-04-14
打赏
举报
回复
malloc申请的,请坚决用delete释放。
new深情的,请坚决用free释放。
-------------------------------------------
菜菜鸟你在说什么啊。-_-
-------------------------------------------
让我神经都紧张了@@
iamcaicainiao
2006-04-14
打赏
举报
回复
steedhorse(晨星) ( ) 信誉:145 2006-04-14 09:15:00 得分: 0
iamcaicainiao(菜菜鸟) ( ) 信誉:95 2006-04-14 09:11:00 得分: 0
malloc申请的,请坚决用delete释放。
new深情的,请坚决用free释放。
-------------------------------------------
菜菜鸟你在说什么啊。-_-
---------------------------------------------------------------------------------
抱歉抱歉,恰好说翻了。
malloc 配 free
new 和 delete结合
runtheway
2006-04-14
打赏
举报
回复
野指针i暂时指向的内存并没有被改变,所以值不变。
将指针置为空,就不会有问题了
free(i);
i = NULL;
晨星
2006-04-14
打赏
举报
回复
iamcaicainiao(菜菜鸟) ( ) 信誉:95 2006-04-14 09:11:00 得分: 0
malloc申请的,请坚决用delete释放。
new深情的,请坚决用free释放。
-------------------------------------------
菜菜鸟你在说什么啊。-_-
晨星
2006-04-14
打赏
举报
回复
因为你是在访问已经归还给系统我内存。
访问一下当然没什么问题,而且运气好的话,你说不定还能看到它原来的值,但问题是,没人给你这种保证,因为归还给系统的内存可能被重新分配和使用,一旦它被重新分配并使用过了,你要想再看到原来的值就不大可能了。
iamcaicainiao
2006-04-14
打赏
举报
回复
内存释放之后,并不代表指针为空了。也就是说,那块内存系统已经可以继续用在别处了(留用),但内存上曾经的东西未必不在了。所以,有的时候可能是12,有的时候可能已经是其他数据(垃圾数据)。
指针free或delete之后,请将指针赋值为null。
只见烟火飞扬
2006-04-14
打赏
举报
回复
什么编译器啊,我在VC6上运行后不是12
加载更多回复(3)
Windows内核-
内存
管理
- 通过
malloc
分配,可以通过
free
释放,重复利用 - 每个进程都有4GB的空间,但是这4GB空间并不是都在使用,有没有一个地方在记录着哪些地址空间已经使用了,哪些没有使用? - 肯定有一个地方在...
malloc
函数分配的
内存
,
free
后任然可以
访问
?
先来看下现象: #include <stdlib.h> #include <stdio.h> #include <string.h> int main() { char *buff = (char *)
malloc
(10); memcpy(buff, "test", 10); printf("buff = %s, buff address = %x\n", buff, buff);
free
(buff); printf("buff
malloc
申请
内存
问题
问题描述 最近发现了一个越界有概率会造成段错误的问题。具体问题是这样的,首先
malloc
申请
一块
内存
,但使用时比实际的大一个字节,比如我
申请
了52个字节,使用了53个或者
申请
50个使用了51个,然后我发现的现象是当我
申请
了52个字节使用了53个字节的时候,程序肯定会挂掉,但
申请
了50个字节使用了51个的时候程序是不会挂的。同样是越界,为什么会造成这样的结果呢? 问题排查 于是,做了一个的实验,查看
申请
的
内存
和实际可使用的
内存
是否一致的,使用
malloc
_usable_size可以查看
内存
的实际可用空间。 #
c++中有了
malloc
/
free
,为什么还需要new/delete?
一:
malloc
/
free
是c/c++中的标准库函数,new/delete是c++中的运算符。它们都用于
申请
动态
内存
和释放
内存
。二:对于非内部数据对象(eg:类对象),只用
malloc
/
free
无法满足动态对象的要求。这是因为对象在创建的同时需要自动执行构造函数,对象在消亡之前要自动执行析构函数,而由于
malloc
/
free
是库函数而不是运算符,不在编译器的控制权限内,也就不能自动执行构造函数和析...
malloc
是如何分配
内存
的?
大家好,我是小林。 很早之前写了一篇图解虚拟
内存
的文章:真棒!20 张图揭开
内存
管理的迷雾,瞬间豁然开朗 最近想多写一些
内存
管理的文章,这次我们就以
malloc
动态
内存
分配为切入点,我在文中也做了小实验:
malloc
是如何分配
内存
的?
malloc
分配的是物理
内存
吗?
malloc
(1) 会分配多大的
内存
?
free
释放
内存
,会归还给操作系统吗?
free
() 函数只传入一个
内存
地址,为什么能知道要释放多大的
内存
? 发车! Linux 进程的
内存
分布长什么样? 在 Linux 操作系统中,
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章