gpt4 book ai didi

C - 访问非空指针结构的成员时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:19 25 4
gpt4 key购买 nike

我用 C 语言创建了一个基本的 LinkedList,我可以创建、添加并开始工作。除了在看似随机数量的 get 调用(第 96 次调用失败,列表中有 94 个元素)之后 get 导致段错误之外,访问当前节点上的下一个指针会导致段错误。

此行导致段错误 while(cur->next != null && i < index)我已经检查过,在发生段错误之前 cur 没有返回空内存地址。它还会在使它崩溃的调用的第二个循环中崩溃(第二个 printf 仅输出 0)。这是整个get函数

void *linkedList_get(LinkedList list, int index)
{
Node *cur = list.head;
int i = 0;
if(index != 0)
{
while(cur->next != null && i < index)
{
cur = cur->next;
printf("I %i\n", i);
printf("%i\n", cur);
i++;
}
}
if(index == i)
return cur->data;
return null;
}

这是节点结构

typedef struct
{
void *data;
struct Node *next;
struct Node *prev;
} Node;

如果需要,这是完整的代码 http://pastebin.com/hpWA8tb8 (请注意,这是我的第一个 C 程序,所以它可能有点草率,我没有释放任何内存)

最佳答案

createEmptyNode 实际上并不返回 n。这意味着链表中使用的节点指针实际上是伪造的(并且指向内存中的任何地方)。您的许多其他创建功能也是如此。

您应该在启用警告的情况下进行编译,这可能会捕捉到这一点。 (例如,在 GCC 上使用 -Wall)。

一般来说,如果您在 C 程序中有任何内存错误,您就无法完美地推断出该错误被触发后的行为。所以我不会声称解决这个问题会使它起作用。 ;-) 在节点中设置数据,分配指针而不是指针的内容时也会出现错误(为此您应该使用类似 memmove 的内容,显式传递内容的大小)。

关于C - 访问非空指针结构的成员时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9561160/

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