HeapAlloc возвращает 0xC0000017: недостаточно квоты

Я выделяю небольшое количество типов данных, общий размер 2mb.

Я использую только одну кучу, и она работает нормально, пока я не доберусь до определенного количества распределений, я почти уверен в этом, потому что я прокомментировал одно распределение, чтобы оно рухнуло при следующем.

Квота = место на диске? документация не охватывает коды ошибок для этой конкретной функции, я профилировал приложение, и для процесса выделено много свободной памяти. Также я ставлю точку останова данных на указатель кучи, и он не ломается. Указатель кучи в порядке, когда я делаю шаг, вплоть до моего вызова HeapAlloc.

Так странно..


person Sorlaize    schedule 22.01.2010    source источник
comment
Указание языка реализации поможет.   -  person Kornel Kisielewicz    schedule 22.01.2010
comment
простите, msvc++. я использую Windows 6.1 SDK, HeapAlloc из winbase.h   -  person Sorlaize    schedule 22.01.2010
comment
Недостаточно квоты — это строковое описание для 0xC0000017, но константа STATUS_NO_MEMORY описана в документации. Дважды проверьте свои распределения и предположения или опубликуйте свой код.   -  person J.J.    schedule 22.01.2010


Ответы (2)


Попробуйте выделить большой кусок памяти (например,> 2 МБ), пока не получите сообщение об ошибке, чтобы определить, связана ли проблема с количеством объектов или общей кучей. Кроме того, вы уверены, что не выделяете более 2 МБ памяти? Я видел эту ошибку, когда был достигнут предел в 2 ГБ, но никогда не достигал 2 МБ, если только ваш файл подкачки не заполнен.

Если ничего не помогает, перезагрузитесь или попробуйте на другом компьютере.

person Andrew    schedule 22.01.2010
comment
я просто загружаю файл размером 1 мб как часть простой игры, он не может быть › 2 гигабайта! выделение 2 ГБ или 3 ГБ не удается ... хм, может быть, это связано с 64-битными указателями? Перезагрузился уже, попробую отладить на 32битной вм. - person Sorlaize; 22.01.2010
comment
То есть можно выделить 1гб, а не 2гб? Возможно ли, что у вас есть спина, которая выделяет слишком много памяти? Может быть, отследить, сколько раз вы вызываете выделение и сколько выделяете каждый раз. - person Andrew; 22.01.2010
comment
да, я могу выделить 1 ГБ в порядке, я, должно быть, слишком много возился с указателями. Я визуализировал распределение, чтобы увидеть, что выделение 1 ГБ оставило мне еще 500 МБ или около того, и при последующем просмотре кода проблемы он не превышал 2 ГБ полностью. Большое спасибо за Вашу помощь!! - person Sorlaize; 22.01.2010
comment
эта ошибка может возникнуть случайно из-за утечки памяти? - person vCillusion; 02.02.2016

В соответствии с этими значениями в WinNt.h код исключения C0000017 сопоставляется с STATUS_NO_MEMORY, что является одним из исключений, которые < href="http://msdn.microsoft.com/en-us/library/aa366597%28VS.85%29.aspx" rel="nofollow noreferrer">HeapAlloc выдаст. Итак, у вас либо не хватает памяти, либо вы переполнили один из выделенных буферов и повредили кучу.

person shf301    schedule 22.01.2010