主题:C++內存管理
josephkwok
[专家分:530] 发布于 2010-06-10 11:09:00
[code]
for (;;)
{
double *d=new double[100000];
if(d==0)cout<<"Good!"<<'\n';
}
[/code]
為什麽運行結果是 d 一直都不等於0的!!!
是不是因為我安裝了Visual Assist X???
我記得以前會等於0的啊.
回复列表 (共19个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-06-10 12:02:00
你想连续申请内存直到分配失败?
板凳
josephkwok [专家分:530] 发布于 2010-06-10 12:32:00
[quote]你想连续申请内存直到分配失败?[/quote]
是的.
3 楼
overfly [专家分:3230] 发布于 2010-06-10 17:09:00
分配失败的话程序会弹出错误的吧,这时还会执行if语句吗?
即使执行了if语句,为什么赋值失败d一定要等于0呢?
是我OUT了吗?
4 楼
wangzining [专家分:620] 发布于 2010-06-10 19:12:00
for(;;)
a=(int *)malloc(400000);
我让这个程序执行,我观察内存使用,内存使用到520000K就死机重启了,看来现在的机器很少有内存分配失败的情况了,内存泄露完都没有失败的情况.....
5 楼
雪光风剑 [专家分:27190] 发布于 2010-06-10 21:39:00
[quote]分配失败的话程序会弹出错误的吧,这时还会执行if语句吗?
即使执行了if语句,为什么赋值失败d一定要等于0呢?
是我OUT了吗?[/quote]
严格来讲,malloc失败的话会返回NULL,也即是(void*)0
6 楼
josephkwok [专家分:530] 发布于 2010-06-10 22:02:00
分配失敗沒有彈出錯誤啊.
那爲什麽我的代碼還可以一直運行卻又沒有輸出"Good!"呢???
我記得分配失敗了是返回0的啊.
7 楼
雪光风剑 [专家分:27190] 发布于 2010-06-10 22:23:00
[quote]分配失敗沒有彈出錯誤啊.
那爲什麽我的代碼還可以一直運行卻又沒有輸出"Good!"呢???
我記得分配失敗了是返回0的啊.[/quote]
跟踪编译器的实现咯
8 楼
josephkwok [专家分:530] 发布于 2010-06-10 23:23:00
其實我太懂怎麼跟蹤編譯器,我只會按F10和F11看看執行到哪句...
能教教我嗎??謝謝...
9 楼
xiaoruo331 [专家分:100] 发布于 2010-06-11 11:09:00
深圳华信群英科技有限公司,目前主要从事软件外包开发、高级软件人才定向输送等业务,面对日益严峻的大学生就业难和IT企业招聘难,自2006以来,与知名通信软件公司正式签订定向输送人才的合作协议,针对想进入软件行业的人员提供企业实训,实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段,共计900学时。
企业订单委培,内训前签订就业安置协议,100%保证就业。实训结束之后,在华信群英科技及其战略合作伙伴从事通信软件研发工作。欢迎有意向者加QQ:649846168咨询。
10 楼
josephkwok [专家分:530] 发布于 2010-06-11 22:37:00
哈哈,樓上很搞笑!
我来回复