| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1317 人关注过本帖
标题:系统是如何区分已分配内存,和未分配内存的?
取消只看楼主 加入收藏
go_hao
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2009-10-9
结帖率:11.11%
收藏
 问题点数:0 回复次数:2 
系统是如何区分已分配内存,和未分配内存的?
系统是如何区分已分配内存,和未分配内存的?
比如用new分配出内存,用指针 p 指向它,然后再次delete这块内存,
我发现,

*p取值的话,前后的值是不同的。
我不理解,因为delete是释放那块内存,但是并没有改写这块内存呀,为何取值会不同呢?

当然,你会说,释放的空间是不能用的,这个我也知道,我就是想明白一下,释放了的空间,在内存块不被改写的情况下,为何用同一个物理指针取它的值的话,值却真的变了,这是为什么呢?

#include <iostream>
using namespace std;

int main()
{
    int *a=new int;
    *a=90;
    cout < < "值为:" < < *a < < endl;
    cout < < "地址为:" < < a < < endl;
    delete a;
    cout < < "值为:" < < (int)*a < < endl;  //此时值已经变了(release版本照样变)
    cout < < "地址为:"  < < a < < endl;
   
    cin.get();
    return 0;
}
搜索更多相关主题的帖子: 系统 内存 
2009-11-06 16:48
go_hao
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2009-10-9
收藏
得分:0 
以下是引用最左边那个在2009-11-6 18:15:01的发言:

首先看了很久,还是不太确定你在问什么!不过还是能解释一点!
int *a=new int   开辟了一个int的空间,它的地址是a
    cout < < "值为:" < < *a < < endl;
    cout < < "地址为:" < < a < < endl;
那么上面两句 ...
谢谢,不过我问的真不是这个,我是问,我释放的那块内存,我没有重写的,为何内容会变。
因为delete后,我再次访问那个物理地址存放有值,确实变了。
2009-11-06 22:32
go_hao
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2009-10-9
收藏
得分:0 
以下是引用东海一鱼在2009-11-7 17:01:13的发言:

在C、C++库级,都提供了自己的‘堆’管理函数。你请求分配的动态内存在‘堆’上被分配后,管理函数会在内部表示该块内存被使用。这样你没有释放,就不会被再次分配。
一旦你释放了这块内存,堆内存管理函数会视当前‘ ...
看来您真是高手呀,虽然我还是不明白,但是我已经知道,这个太深了,我现在还没有能力去了解其机理。
2009-11-07 22:11
快速回复:系统是如何区分已分配内存,和未分配内存的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030852 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved