我正在尝试用 C 编写一个小的双向链表程序,但由于某种原因,它给了我第一个元素的未定义行为。我希望它在开头有一个空单元格,用于链接第一个和最后一个元素。所以它是这样的:... <-> Second Last <-> Last <-> Empty Cell <-> First <-> Second <->...
第一个元素是随机值,但下一个元素有效。例如,如果我的输入文件是 1 2 3 4 5,则输出将为<undefined>
2 3 4 5,其中 undefined 可以是 C 希望给我的任何数字。
奇怪的是,它在调试模式下也能完美运行(使用 MinGW Developer Studio,因为我从学校习惯了它)。它在 Linux 下也很好用(使用 gcc 进行编译)。
这是代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Nod {
struct Nod *next, *ant;
int x;
} Nod_t, *List_t, **AList_t;
void PrintList (List_t sant){
List_t lista = sant->next;
while(lista != sant){
printf("%i ", lista->x);
lista = lista->next;
}
}
List_t PopulateList(char* fis){
List_t lista, sant;
int nr;
FILE *f = fopen(fis, "rt");
sant = (List_t)malloc(sizeof(List_t));
sant->next = sant->ant = NULL;
lista = sant;
//First node
while(!feof(f)){
fscanf(f, "%i", &nr);
lista->next = (List_t)malloc(sizeof(List_t));
lista->next->x = nr;
lista->next->ant = lista;
lista = lista->next;
}
sant->ant = lista;
lista->next = sant;
return sant;
}
int main (){
List_t lista1;
lista1 = PopulateList("1.txt");
PrintList(lista1);
return 0;
}
更好的缩进在这里: http: //pastebin.com/NVQqaYHK