分段故障问题,无法检测

时间:2015-12-23 05:13:26

标签: c

有人可以帮我解决这段代码。我得到分段错误。请帮助我解决我出错的地方。

#include <stdio.h>
#include <stdlib.h>

struct city
{
    int x;
    int pop;
    struct city *next;
};
struct list
{
    struct city *head;
};

void insert(struct list *list1,int a,int b)
{
    struct city *node = (struct city *)malloc(sizeof(struct city));
    node->x=a;
    node->pop = b;
    if(list1->head!=NULL)
    {
        node->next=list1->head;
    }
    list1->head=node;
}

void initialize_list(struct list *list1)
{
    list1->head = NULL;
}

void display(struct list *list)
{
    struct city *temp = list->head;
    while(temp!=NULL)
    {
        printf("%d %d\n",temp->x,temp->pop);
        temp=temp->next;
    }
    free(temp);
}
void getdata(int *x)
{
    char s[1000];
    char c;

    scanf("%[^\n]%*s",s);

    char *p=s;
    int i =0;
    while(*p!='\0')
    {
        while(*p==' ' && *p!='\0')
            p++;
        if(*p!='\0')
            x[i] = atoi(p);
        while(*p!=' ' && *p!='\0')
            p++;
        i++;
    }
}
int max(int a,int b)
{
    if(a>b)
        return a;
    else
        return b;
}

int total(struct list *link)
{
    struct city *r1,*r2;
    r1=link->head;
    r2 = r1;
    int S=0;
    while(r1!=NULL)
    {
        r2 = r1;
        while(r2!=NULL)
        {   
            S=S+max(r1->pop,r2->pop)*abs((r2->x)-(r1->x));
            r2=r2->next;
        }
        r1=r1->next;

    }
    printf("\n%d",S);
    free(r1);
    free(r2);
    return S;
}

int main()
{
    int T;
    int *x,*pop;
    int _no_city;
    char c;
    scanf("%d",&T);

    struct list **link = (struct list **)malloc(T*sizeof(struct list*));
    for(int i=0;i<T;i++)
    {
        link[i]=(struct list *)malloc(sizeof(struct list));
    }

    for(int i =0;i<T;i++)
    {
        scanf("%d",&_no_city);

        x = (int *)malloc(_no_city*sizeof(int));
        pop = (int *)malloc(_no_city*sizeof(int));
        while((c= getchar()) != '\n' && c != EOF)

        fflush(stdin);
        getdata(x);
        getdata(pop);

        initialize_list(link[i]);
        for(int j=0;i<_no_city;j++)
        {
            insert(link[i],x[j],pop[j]);
        }
        free(x);
        free(pop);
    }

    for(int i=0;i<T;i++)
    {
        printf("%d",total(link[i]));
    }
}

问题在于我声明指针指针,我这样做是为了创建一个可变长度的指针数组。

1 个答案:

答案 0 :(得分:0)

你的程序中有很多错误,但是这个错误

for(int j=0;i<_no_city;j++)
{
    insert(link[i],x[j],pop[j]);
}

将在xpop结束时运行,因为您的循环条件错误,可能是导致崩溃的原因。