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

Ubuntu 20.04 GLib 2.66调用g_hash_table_new_full触发g_malloc0内存报错

开发异常问题说明
  • 开发基础环境:Ubuntu 20.04操作系统,基于GLib 2.66使用C语言开展开发工作
  • 异常触发场景:执行addrtab = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);代码时,程序直接终止运行
  • 控制台输出报错:GLib-ERROR **: 15:23:58.535: ../../../glib/gmem.c:138: failed to allocate 11755944670652 bytes
  • 直观异常特征:报错提示申请的内存容量数值异常巨大,与哈希表初始化所需的正常内存规模完全不符

已完成的排查项

  • 注释掉上述触发报错的代码行后,程序可完全消除该错误
  • 程序其他位置的g_hash_table_new_full调用,均未出现任何异常
  • 触发报错的addr_advertise函数完整代码:
void addr_advertise (hash_node_t* alice, hash_node_t* bob){
    GHashTable* addrtab = NULL;

    if ((alice->data->key != bob->data->key) && !(alice->data->attackerid == 1 && bob->data->attackerid == 1)) {

        addrtab = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);

        if(alice->data->attackerid == -1){
            //populate_honest_addr_table(addrtab, alice->data->known_peers);
        }
        else{
            //add_malicious_to_table(addrtab);
        }
        execute_addr(simclock + FLIGHT_TIME, alice, bob, 5, simclock, alice->data->key, addrtab);
    }
}
  • 补充溯源信息:addr_advertise函数在触发本次错误前,已被多次正常调用;根据gmem.c中的报错溯源,本次错误源于发起异常内存申请的g_malloc0()调用(对应gmem.c第138行)

待解答的核心问题

  • 为什么g_malloc0会申请规模如此庞大的内存?
  • 为什么此前多次调用该同一函数均可正常运行?
  • 引发该异常的根本原因可能是什么?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 05:27:07