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

MSDN によると、_callnewh():

新しいハンドラーが見つからない場合、この関数は bad_alloc をスローします。

したがって、を使用して「新しいハンドラー」を正しくインストールしていません_set_new_handler()

于 2011-02-08T08:05:27.827 に答える
0

この問題については、>> Effective C++ の項目 07を参照してください。

于 2011-02-08T08:11:11.257 に答える