2017-04-02 93 views
0
stack.out: malloc.c:2372: 
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 (core dumped) 

当我正在处理我的代码,其中包括堆栈主题,突然可以看到我的GCC编译器的错误,我没有得到任何东西,这是什么意思,如果你知道这事,请告诉我错误的程序。提前感谢。中止核心转储

+2

谁应该读那混乱?至少格式化消息,提供[mcve]和所有必需的信息。阅读[问]了解详情。 – Olaf

+0

@Olaf拿起FSF。 ;-)当堆内存被破坏时,这似乎是[glibc发出的错误消息](https://www.google.com/search?q=malloc.c%3A2372)。把这个“错误信息”放在一个新的编码器上是有点不公平的...... –

+0

@AndrewHenle:我大部分都没有使用代码格式。在编辑之前很难看到消息来自哪里。太糟糕了,这不是OP;这种编辑应该要求作者完成;至少这表明他有兴趣获得答案。但是,由于他不添加所需的信息,我认为他不是。 – Olaf

回答

2

看起来你已经损坏了堆内存,可能是因为你写了一些malloc()内存的末尾。使用gdb获得函数调用的追踪,并且它们可以帮助您调试它。为了让你的程序的追踪,假设它被称为MYPROG,键入以下内容:

gdb myProg 
run 

它得到这个异常后,键入:

bt 

因为你很可能践踏内存,那里的错误发生可能不是这个回溯堆栈的一部分,但它是一个开始的好地方。如果这没有帮助,那么使用valgrindmemwatch,这两者都被描述为here,这些工具会告诉你在写入内存结束的地方,导致损坏和核心转储。