添加此功能时出现分段错误(核心已转储)
segmentation fault (core dumped) when adding this feature
我尝试向已经有效的代码添加功能。添加我的函数后,代码仍然执行,但是当我选择案例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;
在前面的 while 循环之后指针 t
可以等于 NULL
。
while(t != NULL && t->data != x)
{
prev = t;
t = t->next;
}
所以使用空指针访问内存就像在这个语句中
prev->next = t->next;
调用未定义的行为。
你需要检查while循环后指针t
是否不等于NULL
.
我尝试向已经有效的代码添加功能。添加我的函数后,代码仍然执行,但是当我选择案例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;
在前面的 while 循环之后指针 t
可以等于 NULL
。
while(t != NULL && t->data != x)
{
prev = t;
t = t->next;
}
所以使用空指针访问内存就像在这个语句中
prev->next = t->next;
调用未定义的行为。
你需要检查while循环后指针t
是否不等于NULL
.