首页
社区
课程
招聘
[已解决]这段代码会造成内存泄露?
发表于: 2007-11-21 15:15 4744

[已解决]这段代码会造成内存泄露?

2007-11-21 15:15
4744
int _tmain(int argc, _TCHAR* argv[])
{       
        PVOID p = NULL;
        DWORD dwCount = 0;

        for (;;)
        {
                p = VirtualAlloc(0, 500000, MEM_COMMIT, PAGE_READWRITE);
                if (p == NULL)
                {
                        printf("%i", dwCount);
                        MessageBox(0, "GameOver", "GameOver", 0);
                }
                if (!VirtualFree(p, 500000, MEM_DECOMMIT))
                        MessageBox(0, "Err", "Err", 0);

                dwCount ++;
        }
        return 0;
}

跑了4057次就GAMEOVER了

想不明白。。。MSDN也查不出什么。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 299
活跃值: (25)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
指不定你人品不错,系统跟你从0地址分配了一块内存。
2007-11-21 15:35
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
MEM_DECOMMIT 虚拟地址空间还是处于保留状态
也就是说仅仅释放了虚拟地址空间所对应的物理内存,而虚拟地址空间还是被占用
Decommits the specified region of committed pages. After the operation, the pages are in the reserved state.  

使用MEM_RELEASE
2007-11-21 15:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上说的对,顶楼上的
2007-11-21 15:50
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
5
楼上说的很对
2007-11-24 23:06
0
游客
登录 | 注册 方可回帖
返回
//