您的位置:首页 > 其它

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

2012-09-20 09:56 495 查看
typedef struct _MYDATA
{
LIST_ENTRY    ListEntry;
LONG        number;
}MYDATA, *PMYDATA;

void LinkedListTest()
{
LIST_ENTRY head;
MYDATA *pMyData;
PLIST_ENTRY pListEntry;
InitializeListHead(&head);

// 创建链表
for (int i = 0; i < 10; i++)
{
// 分配分页内存
pMyData = (PMYDATA)ExAllocatePool(PagedPool, sizeof(MYDATA));
pMyData->number = i;
InsertTailList(&head, &pMyData->ListEntry);
}

// 遍历链表
pMyData = (PMYDATA)head.Flink;
while (pMyData != (PMYDATA)&head)
{
KdPrint(("%d\n", pMyData->number));
pMyData = (PMYDATA)pMyData->ListEntry.Flink;
}

// 释放链表
KdPrint(("now removing linked list..."));
while (!IsListEmpty(&head))
{
pListEntry = RemoveTailList(&head); // 从尾部删除一个节点(如果需要从中间删除,使用RemoveEntryList函数)
pMyData = (PMYDATA)pListEntry;
KdPrint(("Removed data:%d\n", pMyData->number));
ExFreePool(pListEntry);                // 释放删除掉的节点所占用的内存
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: