【发布时间】:2018-05-21 10:47:45
【问题描述】:
我在尝试从双向链表中删除节点时遇到了一些麻烦。虽然我通常可以删除节点,但当我尝试删除第一个元素时,它会使我的程序崩溃并返回错误 3221225477。
我创建带有标题的列表,如下所示:
typedef struct Inode2*Task;
typedef struct Inode2{
int ID;
int Priority;
int Status;
char *Description;
Person *person;
Date *creation;
Date *deadline;
Date *conclusion;
Task next;
Task previous;
}Task_node2;
Task TaskCreate() {
Task aux=(Task)malloc(sizeof(Task));
aux->next=NULL;
aux->previous=NULL;
return aux;
}
据我所知,这是创建一个带有标题的列表,供我进一步操作。
我有一个函数可以在这个列表的尾部插入一个节点。这似乎工作得很好。
每当我在第一个元素上使用此删除功能时,它都会崩溃:
int TaskRemove(Task h,int IDREMOVE) {
int val;
for(;h;h=h->next)
{
if (h->ID==IDREMOVE)
{
h->previous->next = h->next;
val++;
if (h->previous->previous==NULL)
{
h->previous->next = h->next;
}
}
}
if (val==0)
{
printf("\n\tNo node with such ID\n");
sleep(1);
}
return val;
}
这适用于除最后一个元素之外的所有元素。发生了什么?提前致谢。
【问题讨论】:
-
OT:
typedef struct Inode2*Task;哦,不要键入定义指针。尤其是像Task这样的陌生名字。您的代码对其他人和 - 可能 - 对您自己来说都是不可读的 -
您的第一个错误(由于指针的类型 def)在这里:
Task aux=(Task)malloc(sizeof(Task));。应该(至少)Task aux=malloc(sizeof(struct Inode2));,但更好的是:Task_node2* aux=malloc(sizeof *aux);
标签: c doubly-linked-list