我刚刚通过cs50课程学习了c,我刚刚被介绍了指针和数据 struct (这很让人困惑,请帮助).因此,我得到了一个需要制作哈希表的项目,我首先try 将一些 node 添加到列表的零索引中,而不是立即使用哈希表,并且由于某种原因,我在将 node 添加到列表时出现了分段错误.Its位于第31行(即n->next=表[0]->next;)我无法理解为什么会发生这种情况.有人请帮忙并提前感谢

哈哈,我只是忘了添加代码

给你

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    typedef struct node
    {
        char *word;
        struct node *next;
    } node;

    const unsigned int N = 10;
    node *table[N];

    for (int i = 0; i < 10; i++)
    {
        table[i] = NULL;
    }

    char *words[] = {"Hell", "Sup", "Brain", "Greek", "Mother", "Flip", "Poster", "Dark", "Apple", "Kandy"};

    for (int i = 0; i < 10; i++)
    {
        char *wordle = words[i];

        node *n = malloc(sizeof(node));
        n->word = wordle;

        n->next = table[0]->next;
        table[0]->next = n;

        printf("%s\n", table[0]->next->word);
    }
}

推荐答案

您正在将所有table个元素初始化为NULL,然后try 访问第一个(null)元素:table[0]->next.这将导致取消引用空指针,从而导致出现分段错误.

您需要做的是 for each table个条目分配一个 node :

for (int i = 0; i < N; i++) // You didn't make N constant for no reason, did you?
{
    table[i] = malloc(sizeof(node));
}

Edit:

您可以通过避免重复调用malloc()(建议使用@Lundin)来改进/优化代码:

node* table = calloc(N, sizeof(node));

C++相关问答推荐

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

通过MQTT/蚊子发送大文件—限制在4MB

在32位处理器上优化53—32位模计算>

括号中的堆栈实现错误问题

将整数的.csv文件解析为C语言中的二维数组

如何使用低级C++写出数值

为什么该函数不将参数值保存到数据 struct 中?

&;(str[i])和(&;str)[i]有什么区别?

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

如何用C语言为CLI应用程序编写按键检测系统?

添加函数会 destruct 嵌入式C代码(无IDE)

在C++中允许使用字符作为宏参数

如何在c中使用具有不同变量类型的内存分配?

如何读取程序中嵌入的数据S自己的ELF?

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

具有正确标头的C struct 定义问题

通过GTK';传递回调参数;s g_signal_connect()导致C中出现意外值

将数组返回到链表

inline 关键字导致 Clion 中的链接器错误

strided memcpy(3) 在 libvpx 中如何工作