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

调用含双指针参数的initTable分配哈希表时触发浮点异常问题

问题根因

你遇到的浮点异常核心原因是initTable初始化函数遗漏了对哈希表size成员的赋值:

  • 主函数手动初始化时你主动执行了ht1->size=10赋值操作,encodeKey函数中index %= table->size的取模运算除数合法,程序正常运行
  • 调用initTable函数初始化时,HashTable_T结构体通过malloc分配的内存未初始化,size成员是随机脏值,若内存初始值为0,取模运算除数为0就会直接触发浮点异常。

修复方案

修改initTable函数,补充对size成员的赋值逻辑即可:

void initTable(HashTable_T** table, int size){
    // 可选:增加参数合法性和内存分配结果校验
    if (table == NULL || size <= 0) {
        return;
    }
    (*table) = malloc(sizeof(HashTable_T));
    if (*table == NULL) {
        return;
    }
    (*table)->size = size; // 补充size成员赋值,修复浮点异常
    (*table)->items = calloc(size, sizeof(H_item_t));
};

其他可优化点

  • 当前H_item_t定义中value是int*指针类型,但赋值时直接把int类型的数值强制转成指针存储,在64位系统下会出现数值截断问题,建议直接把value的类型改为int,不需要用指针。
  • malloc、calloc返回值建议做非空校验,避免内存分配失败触发空指针访问崩溃。
  • encodeKey的返回值类型建议和index变量一致改为size_t,避免类型转换溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:27:02