如何摆脱我从给定代码中得到的细分错误?

时间:2018-08-23 17:22:08

标签: c

#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)的问题是,逻辑上代码是正确的,那么我应该怎么做才能正确运行该程序?像我应该做些什么一样,请帮助我,使我整日生气。

2 个答案:

答案 0 :(得分:3)

count > 1为NULL时,您将遇到段错误。您在主要功能的开始处设置了t,在for循环t = head中已更改,但head未更新,并且仍然包含NULL值,因此在{ t

t = head

答案 1 :(得分:2)

发生t=head;时,headNULLt从未设置为其他任何值,因此当发生while(t->link!=NULL)时,您将取消引用NULL