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
相关产品推荐
相关产品推荐

