回 帖 发 新 帖 刷新版面

主题:C++內存管理

[code]
    for (;;)
    {
        double *d=new double[100000];
        if(d==0)cout<<"Good!"<<'\n';
    }
[/code]
為什麽運行結果是 d 一直都不等於0的!!!
是不是因為我安裝了Visual Assist X???
我記得以前會等於0的啊.

回复列表 (共19个回复)

沙发

你想连续申请内存直到分配失败?

板凳

[quote]你想连续申请内存直到分配失败?[/quote]
是的.

3 楼

分配失败的话程序会弹出错误的吧,这时还会执行if语句吗?
即使执行了if语句,为什么赋值失败d一定要等于0呢?
是我OUT了吗?

4 楼

for(;;)
      a=(int *)malloc(400000);
我让这个程序执行,我观察内存使用,内存使用到520000K就死机重启了,看来现在的机器很少有内存分配失败的情况了,内存泄露完都没有失败的情况.....

5 楼

[quote]分配失败的话程序会弹出错误的吧,这时还会执行if语句吗?
即使执行了if语句,为什么赋值失败d一定要等于0呢?
是我OUT了吗?[/quote]
严格来讲,malloc失败的话会返回NULL,也即是(void*)0

6 楼

分配失敗沒有彈出錯誤啊.
那爲什麽我的代碼還可以一直運行卻又沒有輸出"Good!"呢???
我記得分配失敗了是返回0的啊.

7 楼

[quote]分配失敗沒有彈出錯誤啊.
那爲什麽我的代碼還可以一直運行卻又沒有輸出"Good!"呢???
我記得分配失敗了是返回0的啊.[/quote]
跟踪编译器的实现咯

8 楼

其實我太懂怎麼跟蹤編譯器,我只會按F10和F11看看執行到哪句...
能教教我嗎??謝謝...

9 楼

深圳华信群英科技有限公司,目前主要从事软件外包开发、高级软件人才定向输送等业务,面对日益严峻的大学生就业难和IT企业招聘难,自2006以来,与知名通信软件公司正式签订定向输送人才的合作协议,针对想进入软件行业的人员提供企业实训,实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段,共计900学时。
企业订单委培,内训前签订就业安置协议,100%保证就业。实训结束之后,在华信群英科技及其战略合作伙伴从事通信软件研发工作。欢迎有意向者加QQ:649846168咨询。

10 楼

哈哈,樓上很搞笑!

我来回复

您尚未登录,请登录后再回复。点此登录或注册