2010-10-11 134 views
2

可能重复:
malloc.c:3074 error?的malloc错误C++

我越来越对我的C的执行这个奇怪的错误++代码:

malloc.c:3096: 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. 
Aborted 

程序运行罚款高达一指向它从已执行的行捕获上述分段错误(SIGSEGV)的位置。我用gdb发现了这个。

+0

接受其他问题,并显示一些代码哟叫这个功能 – Svisstack 2010-10-11 14:39:22

+0

你能告诉我们的代码行本身是失败的吗? – 2010-10-11 14:39:28

+0

你确定你用C++编程(而不是C)吗? 'malloc()'不应该在C++中使用。你可能想重新标记这个问题。 – sbi 2010-10-11 17:20:32

回答

6

有些东西通过写入无效的内存位置而损坏了堆。最可能的原因是写入已分配对象的边界之外,或者在删除之后写入对象。

这些错误可能很难通过调试器追踪到。最好的工具是内存检查器,如valgrind

+0

这是一个愚蠢的错误,valgrind指出错误的确切位置..谢谢 – Akhil 2010-10-14 22:03:52

1

根据您的声明,在程序执行过程中先前调用了分界线,并且无误地运行到某一点:此错误可能是由“损坏”的内存结构引起的。

如果您要分配内存并溢出写入缓冲区,或者如果要分配内存,然后使用返回的地址而不检查它以确保它是非易失性存储器,则可能会出现这种奇怪且不一致的行为。零地址(内存分配失败)。