我试图将一个函数添加到已经工作的代码中。添加我的函数后,代码仍在执行,但当我选择案例3时,我得到了错误分割错误(核心转储(如果我选择情况3 ,我会得到分段故障(核心转储(错误
这是我对案例3的函数:
typedef struct Note_
{
int data;
struct Note_ *next;
} Note;
Note *head= NULL;
int number= 0;
void deleteNote(int x){
Note *t = head;
Note *prev;
if(t == NULL){
printf("List already empty.n");
}
while(t != NULL && t->data == x){
head = t->next;
free(t);
t= head;
printf("Note %d deleted.n", x);
}
while(t != NULL){
while(t != NULL && t->data != x){
prev = t;
t = t->next;
}
prev->next = t->next;
free(t);
t = prev->next;
}
}
在这个代码片段中
prev->next = t->next;
free(t);
t = prev->next;
指针CCD_ 1可以等于前一while循环之后的CCD_。
while(t != NULL && t->data != x)
{
prev = t;
t = t->next;
}
因此,使用空指针访问内存,如以下语句
prev->next = t->next;
调用未定义的行为。
您需要检查while循环后指针t
是否不等于NULL
。