GList行为错误 - 下一个大小无效(正常)

时间:2015-02-02 01:12:57

标签: c pointers gtk glib gnome

我在我的一个项目中使用Gnome libglib并遇到了一个奇怪的错误。我可以输入GList的元素数量看起来限制为45.在第45个元素,它给出了这个错误

40 counter
41 counter
42 counter
43 counter
44 counter
45 counter
*** Error in `./a.out': free(): invalid next size (normal):   0x0000000001be7e00 ***
Aborted (core dumped)

以下是产生此错误的函数

`GList* getMeAGlist(int size)
{
    GList* test = NULL;

    printf("%d\n",size);
    for(int i=0;i<size;i++)
    {
        printf("%d counter\n",i);
        test  = g_list_append(test,NULL);
    }
    return test;
}`    
  • 可以插入GList的元素数量是否有限制? (我应该以不同的方式分配列表吗?)
  • 我尝试过设置ulimits,内存限制设置为&#39; unlimited&#39;
  • 我在多台机器上尝试过此代码,它在第45个元素
  • 退出
  • 我正在使用最新的GLib版本

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你包含的代码看起来很好,而且GLib没有这样的限制:我可以轻松地用100000作为参数调用你的函数并且它有效(我没有尝试使用更大的数字只是因为对于大型列表,使用g_list_append()的速度很慢。

从错误消息中我猜测您正在尝试拨打free()未分配给malloc()和朋友或已被释放的内容。您是否在没有任何其他代码的情况下尝试了上述函数 - 只是调用函数并返回的main()?