gpt4 book ai didi

c - 链接列表未正确链接

转载 作者:行者123 更新时间:2023-11-30 15:41:26 25 4
gpt4 key购买 nike

这只是我的代码片段。此函数应该从给定文件“dictionary.txt”创建一个链接列表,该文件每行包含一个单词,但我似乎无法使链接正常工作。当我运行代码时,我正确地获得了前 2 个条目 (a,aa),但随后它直接跳到最后一个条目 (zyzzyvas) 和一个段错误,并跳过了其间所有其他 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);
}

编辑:谢谢 Matt 和 interjay,将 curr malloc 移动到 while 主体中解决了我遇到的问题。修复了我的代码。

最佳答案

您仅分配三个节点(在程序初始化时),并重复覆盖其中一个节点。您需要为文件中的每一行分配一个新节点。例如,您可以将行 curr = malloc(sizeof(WORD)); 移动到 while 循环体的开头。

关于c - 链接列表未正确链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com