GLIB段错误:“g_slice_alloc()”没有可用的来源

时间:2012-02-14 14:10:54

标签: c glib

这个段错误发生在我跑步时:

alignarray *aligns = g_ptr_array_sized_new(N_DEFAULT_ALIGNS); 

...,其中alignarray只是GPtrArray

此语句成功运行多次,然后突然失败,报告“没有g_slice_alloc() 可用的来源”。搜索之后,我尝试使用export G_SLICE=always-malloc来禁用切片内存分配,但它仍然失败......

或者是因为代码中的某处我没有很好地处理内存?目前我的问题是我不知道在哪里调试。我尝试了 gdb valgrind ,但两者都无济于事。

1 个答案:

答案 0 :(得分:1)

设置G_SLICE=always-malloc仍然会出现此问题,这很奇怪。切片分配器是一种通过为大小相似的操作重用内存来避免分配内存的开销的方法。

如果你分配100个长度为8个字节的东西(比如32位的2个指针),那么释放它们并分配更多,然后你将重用相同的内存。需要注意的是,必须确保使用切片分配器功能释放使用切片分配器分配的内存 - 直接通过g_slice_free或通过类似g_object_unref的方式间接释放。检查您的代码是否属于不会将GPtrArray(或类似大小的内容)的其他实例与g_free

一起释放

您可以使用valgrind识别错误的释放或损坏发生的位置。使用valgrind时,必须设置G_SLICE=always-malloc