我写了一个简单的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(),pTemp);
}
}