链表的问题...

嬴政爱天下 2011-02-18 03:46:53
#include <ntddk.h>
#define MEM_TAG 'jklk'
typedef struct
{
LIST_ENTRY List_entry;
ULONG Data;
}MY_LIST,*PMY_LIST;

LIST_ENTRY My_listHead;//声明一个结构

void Unload(IN PDRIVER_OBJECT DriverObject)
{
KdPrint(("驱动卸载成功!\n"));
}


VOID Listinit()
{

InitializeListHead(&My_listHead);//初始化
}

NTSTATUS MyAppendData(ULONG AppendValue)
{
PMY_LIST my_AppendList=(PMY_LIST)ExAllocatePoolWithTag(PagedPool,sizeof(MY_LIST),
MEM_TAG);
if(my_AppendList==NULL)
{
KdPrint(("分配空间失败\n"));
return -1;
}
else
{
KdPrint(("分配空间成功\n"));
}
my_AppendList->Data=AppendValue;
InsertHeadList(&My_listHead,(PLIST_ENTRY)my_AppendList);
ExFreePool(my_AppendList);

return STATUS_SUCCESS;

}

void ShowList()
{
PLIST_ENTRY p=NULL;
PMY_LIST elem;
KdPrint(("Show List start\n"));
for( p=My_listHead.Flink;p!=My_listHead.Flink;p=p->Flink)
{

elem=CONTAINING_RECORD(My_listHead.Flink,MY_LIST,List_entry);
}


KdPrint(("\n\nValue Is%x \n",elem->Data));

}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegPath)
{
ULONG value;
value=0;
KdPrint(("驱动加载成功!\n"));
Listinit();
for(value=0;value<10;value++)
MyAppendData(value);
ShowList();
DriverObject->DriverUnload=Unload;
return STATUS_SUCCESS;
}



哪位大侠帮忙改一下这段链表,该如何让他将 10个数全部都显示出来的呀?
晕死了,试了好多次他只能显示一个数值,我看的是天书夜读他上面的例子仿写的..
但搞 了半天还是没显示出来,谢谢哪位帮助一下哈。。
...全文
64 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
申宇田 2011-02-22
  • 打赏
  • 举报
回复
在MyAppendData里面错了,
my_AppendList->Data=AppendValue;
InsertHeadList(&My_listHead,(PLIST_ENTRY)my_AppendList);
ExFreePool(my_AppendList);

这里为什么要把分配的内存free掉??你仔细想想吧
嬴政爱天下 2011-02-18
  • 打赏
  • 举报
回复
错了,是放再循环体内的话,一个数字都打印不出来..
嬴政爱天下 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 phshentu 的回复:]

在showlist函数里,把kdprint那句移到循环里面。
for( p=My_listHead.Flink;p!=My_listHead.Flink;p=p->Flink)
{
elem=CONTAINING_RECORD(My_listHead.Flink,MY_LIST,List_entry);
KdPrint(("\n\nValue Is%x \n",elem……
[/Quote]
那样的话,也只能打印出来一个9啊..
申宇田 2011-02-18
  • 打赏
  • 举报
回复
在showlist函数里,把kdprint那句移到循环里面。
for( p=My_listHead.Flink;p!=My_listHead.Flink;p=p->Flink)
{
elem=CONTAINING_RECORD(My_listHead.Flink,MY_LIST,List_entry);
KdPrint(("\n\nValue Is%x \n",elem->Data));
}



21,615

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧