您的位置:首页 > 其它

Windows驱动开发小练习-内存分配与链表操作

2013-11-19 01:09 621 查看
1 typedef struct _MYDATA
 2 {
 3     LIST_ENTRY    ListEntry;
 4     LONG        number;
 5 }MYDATA, *PMYDATA;
 6 
 7 void LinkedListTest()
 8 {
 9     LIST_ENTRY head;
10     MYDATA *pMyData;
11     PLIST_ENTRY pListEntry;
12     InitializeListHead(&head);
13 
14     // 创建链表
15     for (int i = 0; i < 10; i++)
16     {
17         // 分配分页内存
18         pMyData = (PMYDATA)ExAllocatePool(PagedPool, sizeof(MYDATA));
19         pMyData->number = i;
20         InsertTailList(&head, &pMyData->ListEntry);
21     }
22 
23     // 遍历链表
24     pMyData = (PMYDATA)head.Flink;
25     while (pMyData != (PMYDATA)&head)
26     {
27         KdPrint(("%d\n", pMyData->number));
28         pMyData = (PMYDATA)pMyData->ListEntry.Flink;
29     }
30 
31     // 释放链表
32     KdPrint(("now removing linked list..."));
33     while (!IsListEmpty(&head))
34     {
35         pListEntry = RemoveTailList(&head); // 从尾部删除一个节点(如果需要从中间删除,使用RemoveEntryList函数)
36         pMyData = (PMYDATA)pListEntry;
37         KdPrint(("Removed data:%d\n", pMyData->number));
38         ExFreePool(pListEntry);                // 释放删除掉的节点所占用的内存
39     }
40 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: