bad_alloc при вызове new в классе Texture

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

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-битной системе (свежая перезагрузка), и до этого в куче было выделено только около двадцати вещей, поэтому я знаю, что куча не повреждена.

Я весьма озадачен...


person Rannath    schedule 08.02.2011    source источник
comment
Это на винде? Какое потребление памяти показывает диспетчер задач для этого процесса?   -  person sharptooth    schedule 08.02.2011
comment
Если в системе достаточно памяти, _callnewh должен дать сбой. Вы звоните set_new_handler куда-то сверху? Можете ли вы опубликовать код для конструкторов Texture ?   -  person Vijay Mathew    schedule 08.02.2011


Ответы (3)


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

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

person Andrea Bergia    schedule 08.02.2011

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

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

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

person trojanfoe    schedule 08.02.2011

Я думаю, что по этому вопросу вы можете обратиться к >>пункту 07 действующего С++.

person User 154806    schedule 08.02.2011