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