2013-10-20 146 views
5

我得到一个神秘的错误,我不知道为什么。此代码在失败之前运行多次,并且在同一点上始终失败。神秘的malloc:SYSMALLOC:断言失败错误

这里是我的代码:

assert(size > 0); 
    int* sorted = malloc(size * sizeof(int)); 

这里是当我运行它,我得到的错误:我试图打印出大小

malloc.c:2369: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed. 

,并在这种情况下为1。这个代码在失败之前运行多次,大小不一,包括1。

没有人有任何知道我做错了吗?

谢谢。

+0

什么是行2369?' – ouah

+0

可能的重复[为什么我会得到一个C malloc断言失败?](http://stackoverflow.com/questions/2987207/why-do-i-get-ac-malloc-断言失败) –

+2

@ouah我认为行是malloc函数本身的一部分,而不是海报的代码的一部分;他可能没有该图书馆的来源。 – mah

回答

6

当您的代码freeð在某个时间之前无效地址,或写过去分配的内存块的结尾通常发生。通过valgrind或其他内存分析器运行你的代码来查看发生这种情况的点。

+0

我每次使用免费时都会尝试评论。我仍然得到错误。 – Ian

+0

@Ian然后寻找在那里你分配内存的地方,看看你是否总是提供正确的'sizeof',也即索引到该内存是正确的。这是最差的一种错误,如果没有内存分析器,很难找到它们。 – dasblinkenlight

+1

我试着通过valgrind运行代码,发现一些错误。我会尝试修复它们以查看错误是否消失。谢谢! – Ian