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

