void TestDoubleList(){
LIST_ENTRY list_head;
PLIST_ENTRY p = NULL;
int it;
InitializeListHead(&list_head);
for (int i = 0; i < 20; i++){
PMY_DATA pmd = ExAllocatePool(PagedPool, sizeof(MY_DATA));
pmd->num = i + 1;
InsertTailList(&list_head, &pmd->list);
}//向链表插入数据
for (p = list_head.Flink; p != &list_head; p = p->Flink){
PMY_DATA pmd = CONTAINING_RECORD(p, MY_DATA, list);
DbgPrint("pmd->num:%d\n", pmd->num);
}
while (!IsListEmpty(&list_head)){//释放申请的内存
PLIST_ENTRY plist = RemoveHeadList(&list_head);
PMY_DATA pmd = CONTAINING_RECORD(plist, MY_DATA, list);
ExFreePool(pmd);
}
}
wdk中使用双向链表(list)
最新推荐文章于 2021-02-14 15:17:15 发布
本文详细介绍了在Windows内核环境下使用双链表进行数据插入、遍历及释放内存的具体实现过程。通过初始化链表头,循环插入数据节点,并使用Flink指针遍历链表打印每个节点的数据,最后释放所有分配的内存。此过程展示了链表作为一种基本数据结构在内存管理上的应用。
678

被折叠的 条评论
为什么被折叠?



