Пожалуйста, помогите с проблемой heapalloc
Моя программа написана на обычном языке Си в Visual Studio 2017 и работает на Windows 10.
Он считывает двоичные файлы в память и извлекает информацию. Если я обрабатываю большое количество (более 100) действительно больших файлов (50-75 МБ), я получаю ошибку HeapAlloc. Я делаю HeapAlloc, обрабатываю файл, а затем делаю HeapFree. По какой-то причине куча продолжает увеличиваться в размере, пока не достигнет предела для 32-битных приложений.
У меня сложилось впечатление, что если я сделаю HeapFree, то следующий HeapAlloc будет повторно использовать память, уже используемую кучей. Похоже, что это не так.
Что я должен делать по-другому?
Что я уже пробовал:
// do this once at the start hHeap = GetProcessHeap(); // the following once per file hFile = CreateFile(lpszLibraryName,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); dwFileSize = GetFileSize(hFile, &dwSizeHigh); lpHeapData = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, dwFileSize + 1); ReadFile(hFile, lpHeapData, dwFileSize, &dwBytesRead, NULL); ... process the file data ... HeapFree(hHeap, 0, lpHeapData); CloseHandle(hFile);
Richard MacCutchan
Есть ли какая-то вероятность того, что вы каким-то образом искажаете кучу при обработке данных файла? Кстати, почему вы просите HeapAlloc обнулить память, когда вы сразу же перезаписываете ее?