2015-02-06 38 views
0

作为赋值的一部分,我正在读取文件中的人员的姓名和ID,并将其保存在单独的链接列表中。我有一个嵌套的while循环遍历列表,直到到达结尾,然后在最后赋值。不幸的是,程序在阅读时不断崩溃,似乎围绕着第二个while循环。使用链接列表时失败While循环

这里是之前在main()

struct node 
{ 
    char name[50]; 
    int id; 
    struct node *next; 
}*start; 

这里建立的结构是本身的功能:

void read() 
{ 
    int tempNum = 0, id, jack = 0; 
    char name[50]; 

    struct node *temp, *right; 
    temp = start; 

    FILE *ifp = fopen("AssignmentOneInput.txt", "r"); 
    while(fscanf(ifp," %s", &name) != EOF) 
    { 

     fscanf(ifp, " %[^,]s, %[^/n]d", &name, &id); 

     temp = (struct node *)malloc(sizeof(struct node)); 

     strcpy(temp->name,name); 
     temp->id = id; 

     right = (struct node *)start; 

     printf("test number one\n"); 
     while(right->next != NULL) 
     { 
      printf("test number two\n"); 
      right = right->next; 
     } 
     printf("test number three\n"); 


     right->next = temp; 
     right = temp; 

     right->next = NULL; 

    } 

} 

,将其作为主要功能的实现,这就是所谓的第一个功能,所以它看起来有点像:

main() 
{ 
    read(); 
+0

用main()给我们一个完整的程序。告诉我们它的崩溃位置以及确切的消息。 – 2015-02-06 19:38:06

+0

'node'的定义是什么? – Martin 2015-02-06 19:38:20

+0

你是否曾经将节点的'next'初始化为NULL? – AndyG 2015-02-06 19:38:41

回答

0

我想start是一个全局变量?然后它将由编译器和C运行时系统进行零初始化。这意味着它将作为指针被初始化为NULL。因此,当您在代码中使用未初始化的代码时,它将为NULL,并且在取消引用指针时您有undefined behavior。而未定义的行为可以说是崩溃的最常见原因。