Это всего лишь фрагмент моего кода. Эта функция должна создать связанный список из заданного файла «dictionary.txt», который содержит по одному слову в каждой строке, но я просто не могу заставить ссылки работать правильно. Когда я запускаю код, я получаю первые 2 записи должным образом (a, aa), но затем он пропускает прямо к последней записи (zyzzyvas) и сбою seg и пропускает все остальные 80000 или около того записей.Связанный список не правильно связан
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct word {
char entry[64];
struct word *next;
} WORD;
WORD *Dstart, *Dend, *curr;
WORD* makeDictionary() {
FILE *fp;
fp=fopen("dictionary.txt","r");
fgets(Dstart->entry,63,fp);
fgets(Dend->entry,63,fp);
Dstart->next=Dend;
int count=1;
while(!feof(fp))
{
curr = (WORD *) malloc(sizeof(WORD));
fgets(curr->entry,63,fp);
Dend->next=curr;
Dend=Dend->next;
Dend->next=NULL;
count++;
}
int i;
curr=Dstart;
for (i=1;i<=20;i++) //Just to test if it's linking
{
printf("%s",curr->entry);
curr=curr->next;
}
}
int main {
// curr = (WORD *) malloc(sizeof(WORD)); moved to the while loop
Dstart = (WORD *) malloc(sizeof(WORD));
Dend = (WORD *) malloc(sizeof(WORD));
Dstart->next=NULL;
Dend->next=NULL;
makeDictionary();
return(0);
}
Edit: Спасибо Matt и interjay, перемещая ТОК таНос в тело в то время как фиксированной проблемы у меня был. Исправлен мой код.
oh 'fgets' - мы снова встречаемся. – ryrich
Вам действительно нужно добавить некоторые детали здесь: компилятор испускает любые сообщения? Как это не ведет себя так, как ожидалось? Не просите нас прочитать ваш код, найти проблемы, * и * отладить его для вас. Вам нужно задать конкретный вопрос. –
'Dstart-> next = Dend;' когда это утверждение будет достигнуто 'Dstart' не указывает ни на что. – wildplasser