Работа со стандартным пулом памяти
Второй способ выделения блока памяти основан на использовании стандартного пула. Для получения памяти из стандартного пула мы пользуемся функцией HeapAlloc, передавая ей в качестве первого параметра значение идентификатора стандартного пула памяти, полученное от функции GetProcessHeap:
lpszBuff = (char*)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, 0x1000);
Так как мы указали флаг HEAP_ZERO_MEMORY, полученный блок памяти будет расписан нулями. Флаг HEAP_GENERATE_EXCEPTIONS не указан, поэтому после вызова функции мы должны проверить значение, полученное от нее.
На следующем этапе приложение выполняет копирование строки в блок памяти и отображение ее в консольном окне:
strcpy(lpszBuff, "Test string");
printf("String:>%s<\n", lpszBuff);
Так как исключения не обрабатываются, при их возникновении работа приложения завершится аварийно.
После использования приложение освобождает блок памяти, полученный из стандартного пула, для чего вызывается функция HeapFree:
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, lpszBuff);
Последний фрагмент приложения демонстрирует использование функций malloc и free для работы со стандартным пулом памяти и в комментариях не нуждается.