gpt4 book ai didi

c - 当头被删除并向前移动时,链表不会返回主函数

转载 作者:行者123 更新时间:2023-11-30 17:10:14 25 4
gpt4 key购买 nike

我目前在编写字典项目时陷入了这一部分。我几乎可以轻松完成其他所有事情,但这里除外。

我的问题是,每当我在通过这个特定的 if 语句后将字典(链表头)返回到主函数时,都会弹出异常。

    item *deleteEntry(item *entry, item *dictionary)
{
item *cont,*temp;
int check;

check = 0;
for (cont = dictionary; cont != NULL; cont = cont->next)
{
if (!strcmp(cont->word, entry->word) && cont == dictionary)
{
dictionary = cont->next;
free(cont);

check = 1;
break;
}
//other non-problematic entry-deletion statements
}

if (!check)
return 0;

return dictionary;
}

尽管它确实在函数内部正确存储了数据(我已经通过打印进行了测试),但当返回到主函数时它不起作用。

这是我调用函数的部分

printf("\nEnter word to delete entry: ");
getchar();
fgets(entry->word, WORDLIMIT, stdin);
if (dictionary[toupper(entry->word[0]) - 65] == NULL)
printf("\nWord Does not exist");
else
{
cont = deleteEntry(entry, dictionary[toupper(entry->word[0]) - 65]);
if (cont)
dictionary[toupper(entry->word[0] - 65)] = cont;
else
printf("\nError: Word doesn't exist in archive %d!!\n", toupper(entry->word[0]));

异常(exception)是:

Access violation reading location 0xDDDDDDDD. (I don't know what this is, even after google searches. please enlighten me)

这是我在这里发表的第一篇文章,所以我会借此机会说声谢谢,因为这是我遇到困难时第一个去的地方:)

问题解决了!

最佳答案

正如我评论的那样,我认为关键点是 dictionary[toupper(entry->word[0] - 65)]此代码会导致超出范围访问指针数组。例如

entry->word[0] = 'a'

toupper(entry->word[0] - 65) = 32

但我认为你的数组有 26 个元素。

一定是

字典[toupper(entry->word[0]) - 65]

关于c - 当头被删除并向前移动时,链表不会返回主函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950911/

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