gpt4 book ai didi

c - 我的链接列表没有正确添加(不断替换第 3 个位置)- c

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:56 24 4
gpt4 key购买 nike

它似乎添加了第一个 mapList 节点,然后添加了它后面的节点,但是之后添加的每个节点每次都被放在第三个位置,即使我的 *next 似乎设置正确(我' m 在指针和 C) 上仍然是新的,当我想访问更多节点时,这会导致我出现段错误。我有 patronNode 添加工作,这要复杂得多,我似乎无法正确处理,那些输出只是对我吐亵渎 =(

这是两个结构..

struct bookMap
{
int totalBooks;
char key[AUTHOR_NAME_LEN];
struct bookMap *next;
struct bookNode *bList,*newBNode;
};


struct Library{
int totalPatrons, totalBooks;
struct patronNode *pList,*newPNode;
struct bookMap *mapList,*newMapNode;
};

这是添加函数

int addMapNode(struct Book *b, struct Library *lib)
{
struct bookMap *newKey;
printf("\nENTERING ADDMAPNODE WITH KEY = %s\n",b->author);
if(lib->totalBooks == 0)//NO CURRENT BOOKS
{
lib->totalBooks++;
newKey = (struct bookMap *) malloc(sizeof(struct bookMap));
strcpy(newKey->key,b->author); //set the first map node key
addBookToCollection(b,newKey); //add the book to our first map node
lib->mapList = newKey;
return(0);
}else
{
if((isKey(b,&newKey,lib->mapList)) == 0)
{
addBookToCollection(b,newKey);
}else
{
struct bookMap *walker;
walker = lib->mapList;
for(;;)
{
if(walker->next == NULL)
{
printf("Adding a key after %s\n",walker->key);
lib->totalBooks++;
newKey=(struct bookMap *) malloc(sizeof(struct bookMap));
strcpy(newKey->key,b->author);
addBookToCollection(b,newKey);
newKey->next = NULL;
walker->next = newKey;
printf("added %s\n",walker->next->key);
return(0);
}
printf("current key is %s\n",walker->key);
walker = walker->next;
}

这是我的输出:

使用 KEY = Orson Scott Card 输入 ADDMAPNODE

使用 KEY = Frank Herbert 输入 ADDMAPNODE -在 Orson Scott Card 之后添加 key -添加了弗兰克赫伯特

使用 KEY = Isaac Asimov 输入 ADDMAPNODE - 当前 key 是 Orson Scott Card - 在 Frank Herbert 之后添加一把 key - 添加艾萨克·阿西莫夫

使用 KEY = Douglas Adams 输入 ADDMAPNODE - 当前 key 是 Orson Scott Card - 在 Frank Herbert 之后添加一把 key - 添加了道格拉斯·亚当斯

使用键输入 ADDMAPNODE = George Orwell - 当前 key 是 Orson Scott Card - 在 Frank Herbert 之后添加一把 key - 添加了乔治·奥威尔

使用 KEY = Robert A. Heinlein 进入 ADDMAPNODE - 当前 key 是 Orson Scott Card - 在 Frank Herbert 之后添加一把 key - 添加了 Robert A. Heinlein

使用 KEY = Ray Bradbury 进入 ADDMAPNODE - 当前 key 是 Orson Scott Card - 在 Frank Herbert 之后添加一把 key - 添加了 Ray Bradbury

等等....每个键都添加在 Frank Herbert 之后,因为代码认为 Herbert's->next 为 NULL,即使我只是将它设为新节点...CONFIZZZLED

最佳答案

您应该包括 struct bookMap 定义,但我相信您的问题是 strcpy 调用:您没有为 分配任何空间->键字段

一个问题是您未能为第一个节点设置 ->next = NULL,但如果这在这里真的很重要,您会得到 "current key is " 线条出乎意料,而不是所见。

所以 walker->next == NULL 每次都在第一个之后,但是当 "added " 行执行时它没问题。

我会检查 isKey 的代码并确保它不会破坏 ->next 指针。

关于c - 我的链接列表没有正确添加(不断替换第 3 个位置)- c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994834/

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