You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言哈希表struct node指针数组访问元素时报段错误求助

问题根因

你声明的node *table[N]是元素为node类型指针的数组,仅完成了数组本身的内存分配,数组内的每个指针变量都是未初始化的野指针,直接通过->运算符访问野指针指向的next字段属于非法内存访问,因此触发段错误。

修复方案

有两种常用的修复逻辑,可根据你的哈希表设计选择:

  • 方案一:修改哈希表为结构体数组
    如果哈希表每个槽位的头结点是固定分配的,不需要动态申请,直接将指针数组改为结构体数组即可:
// 原有定义修改为结构体数组
node table[N];

// 初始化逻辑
for (int i = 0; i < N; i++)
{
    table[i].next = NULL;
}
  • 方案二:保留指针数组,先分配内存再操作
    如果设计需要使用指针数组结构,需要先给每个数组元素分配对应node大小的内存空间,再操作结构体字段:
for (int i = 0; i < N; i++)
{
    // 为头结点申请堆内存
    table[i] = malloc(sizeof(node));
    if (table[i] == NULL) {
        perror("内存分配失败");
        // 这里可补充已分配内存的回收逻辑后退出程序
        exit(EXIT_FAILURE);
    }
    table[i]->next = NULL;
}
补充说明

编译通过仅代表代码语法符合C语言规范,编译器不会检测运行时的野指针访问问题,因此不会在编译阶段抛出错误。

内容的提问来源于stack exchange,提问作者stinno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:15:01