#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
static int count = 0;
struct node {
int coef;
int pow;
struct node *link;
};
struct node *head = NULL;
void showoff() {
struct node *t1;
t1 = head;
while (t1 != NULL) {
printf("|%d|%d|%x|--", t1->coef, t1->pow, t1->link);
t1 = t1->link;
}
}
int main() {
int n, i;
struct node *temp, *t;
t = head;
printf("Number of nodes\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
temp = (struct node*)malloc(sizeof(struct node));
temp->coef = NULL;
temp->pow = NULL;
if (count == 0) {
temp->link = head;
head = temp;
}
if (count == 1) {
temp->link = head->link;
head->link = temp;
}
if (count > 1) {
while (t->link != NULL) {
t = t->link;
}
temp->link = t->link;
t->link = temp;
}
count++;
}
showoff();
}
当我尝试调试该程序时,它显示程序收到信号*SIGSEGV*,Segmentation fault
。我不知道该怎么办,所以才发布了这个问题。 while(t->link != NULL)
的问题是,逻辑上代码是正确的,那么我应该怎么做才能正确运行该程序?像我应该做些什么一样,请帮助我,使我整日生气。
答案 0 :(得分:3)
当count > 1
为NULL时,您将遇到段错误。您在主要功能的开始处设置了t
,在for循环t = head
中已更改,但head
未更新,并且仍然包含NULL值,因此在{ t
:
t = head
答案 1 :(得分:2)
发生t=head;
时,head
是NULL
。 t
从未设置为其他任何值,因此当发生while(t->link!=NULL)
时,您将取消引用NULL
。