bad_alloc при вызове new для класса Texture - PullRequest
4 голосов
/ 08 февраля 2011

Это оскорбительная строка:

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 байт

и до сих пор программа поместила, возможно, 2 МБ в кучу в 32-битной системе (новая перезагрузка), и до этого в куче выделялось только около двадцати вещей, поэтому я знаю, что повреждения кучи нет.

Я так растерялся ...

Ответы [ 3 ]

1 голос
/ 08 февраля 2011

Повреждение кучи не обязательно означает «слишком много выделенной памяти»;скорее это часто означает, что вы облажались с некоторыми указателями.

Проверьте, не совершили ли вы такие ошибки, поскольку вы говорите, что не исчерпали память.

0 голосов
/ 08 февраля 2011

Я думаю, что для этой проблемы вы можете обратиться к >> Item 07 Effective C ++.

0 голосов
/ 08 февраля 2011

Согласно MSDN, _callnewh ():

Эта функция выдает bad_alloc, если новый обработчик не может быть найден.

Таким образом, вы неправильно установили«новый обработчик», использующий _set_new_handler().

...