Я написал простую программу на C, которая создает односвязный список. Оно работает;например, я выдвинул несколько чисел в список, и функция print_list(...)
выводит числа на консоль.
Однако затем я добавил функцию clear_list(...)
и вызвал ее до print_list(...)
, чтобы посмотреть, что произойдет. После вызова clear_list
, print_list
по-прежнему печатает номера, как и раньше.
Как print_list
печатает номера из освобожденной памяти? Я использую HeapAlloc
для выделения структуры списка и HeapFree
для освобождения.
Код ниже:
static BOOL push_list(DWORD a)
{
LIST *ptr = NULL;
ptr = (PLIST)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LIST));
if (ptr == NULL)
{
printf("Error push list\n");
return FALSE;
}
ptr->i = a;
ptr->next = LIST_HEAD;
LIST_HEAD = ptr;
return TRUE;
}
void free_dir_list(void)
{
PLIST pTemp = NULL;
P_LIST PTR = LIST_HEAD;
while (PTR != NULL)
{
pTemp = PTR;
PTR = PTR->next;
HeapFree(GetProcessHeap(), 0, pTemp);
}
}