| Предыдущий | Следующий |
| ERROR_SEM_TIMEOUT | ERROR_INVALID_NAME |
ERROR_INSUFFICIENT_BUFFER
API требуется область данных большего размера
ERROR_INSUFFICIENT_BUFFER часто появляется в двухвызовных шаблонах Windows API: сначала вызывающая сторона запрашивает требуемый размер, выделяет память, затем повторяет вызов. Размер может выражаться в байтах или символах, поэтому необходим контракт конкретной функции.
Правильная обработка
- До повторного выделения прочитайте возвращённую требуемую длину.
- Проверьте, включает ли счётчик завершающий нулевой символ.
- При преобразовании числа элементов в байты используйте арифметику с защитой от переполнения.
- Учитывайте, что результат может увеличиться между вызовами определения размера и получения данных.
Распространённые ошибки
Частые причины включают передачу sizeof(pointer) вместо ёмкости буфера, смешение размеров элементов ANSI и Unicode, отсутствие полей версии структуры и трактовку сообщённого требования как числа байтов, когда оно выражено в символах. Повторите вызов с достаточно большим буфером и ограниченной политикой роста; неизменно маленький размер после нескольких попыток может указывать на неверный прототип или повреждённый выходной параметр.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
