在类Texture上调用new时bad_alloc

时间:2011-02-08 07:59:40

标签: c++ new-operator bad-alloc

这是违规行:

Texture *texture = new Texture (...);

我在这里收到bad_alloc:

void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
    {       // try to allocate size bytes
    void *p;
    while ((p = malloc(size)) == 0)
            if (_callnewh(size) == 0)
            {       // report no memory
            static const std::bad_alloc nomem;
            _RAISE(nomem);
            }

    return (p);
    }

大小约为28字节

到目前为止,该程序在32位系统中堆放了大约2 MB(重新启动),在此之前,只有大约20个内容在堆上分配,因此我知道没有堆损坏。

我很困惑......

3 个答案:

答案 0 :(得分:1)

堆损坏并不一定意味着“分配了太多内存”;相反,它通常意味着你搞砸了一些指针。

检查你是否犯了这样的错误,因为你说你没有用尽记忆。

答案 1 :(得分:0)

根据MSDN,_callnewh():

  

如果是,则此函数抛出bad_alloc   无法找到新的处理程序。

所以你没有使用_set_new_handler()正确安装'新处理程序'。

答案 2 :(得分:0)

我认为对于这个问题,您可以参考有效C ++的>> Item 07