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

C语言哈希函数运行出现Core dumped问题求助

问题原因与修复方案

核心问题

程序触发Core dumped的直接原因是字符串数组未以NULL终止,导致第一个while循环越界访问内存:

  • 你定义的char *p[]={"pole","olep","mamao","omama"}仅包含4个有效字符串指针,数组末尾没有添加NULL作为终止标记。
  • 第一个while(*(p+j))循环会持续递增j,直到读取到NULL才停止。当j=4时,p[4]已经超出数组的合法范围,属于未定义行为——程序会读取栈上数组后的随机内存,可能因访问非法地址直接崩溃,或破坏栈上其他变量(比如后续for循环的计数器),导致后续哈希计算无法执行。

当你注释掉打印字符串的循环时,这个越界访问的操作被移除,程序自然能正常执行哈希计算逻辑。

修复方法

有两种简单的修复方式:

方式1:给数组添加NULL终止符

修改数组定义,在末尾加上NULL,让while循环能正确终止:

char *p[]={"pole","olep","mamao","omama", NULL};

方式2:用数组长度控制循环

直接通过数组的实际长度来限制循环次数,避免依赖NULL标记:

int j=0;
// 计算数组元素个数:总字节数 / 单个元素字节数
int arr_len = sizeof(p) / sizeof(p[0]);
while(j < arr_len){
    printf("%s\n", p[j]);
    j++;
}

额外优化建议

  • 打印uint64_t类型时,建议使用标准格式宏PRIu64(需包含<inttypes.h>头文件),替代%lu,提升代码可移植性:
    #include <inttypes.h>
    // ...
    printf("%" PRIu64 "\n", var);
    
  • 哈希函数中(*s >> ((uu.h/(i+1)) % 5))的逻辑,当i+1 > uu.h时,uu.h/(i+1)结果为0,移位操作变为*s >> 0(无实际意义),如果需要更均匀的哈希分布,可以调整移位的计算逻辑,比如用(i % 5)替代当前的表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:40:29