4

这是违规行:

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 个东西被分配在堆上,所以我知道没有堆损坏。

我很混乱...

4

3 回答 3

1

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

检查你是否犯了这样的错误,因为你说你没有耗尽内存。

于 2011-02-08T08:12:43.373 回答
0

我认为对于这个问题你可以参考Effective C++的>> Item 07

于 2011-02-08T08:11:11.257 回答
0

根据 MSDN,_callnewh():

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

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

于 2011-02-08T08:05:27.827 回答