2017-04-02 7 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) 

Als ich mit meiner Codes zu tun hatte, die Stapel Gegenstand enthält, und plötzlich ist es mein gcc Compiler Fehler gesehen, die ich nicht alles bekommen hat, was es bedeutet, wenn Sie diese Dinge wissen, bitte sagen Sie mir falsch im Programm.Vielen Dank im Voraus.Aborted core dumped

+2

Wer soll dieses Durcheinander lesen? Formatieren Sie die Nachricht zumindest, stellen Sie eine [mcve] und alle erforderlichen Informationen bereit. Lesen Sie [fragen] für Details. – Olaf

+0

@Olaf Nehmen Sie es mit der FSF. ;-) Dies scheint eine [Fehlermeldung von glibc] (https://www.google.com/search?q=malloc.c%3A2372) zu sein, wenn der Heap-Speicher beschädigt wird. Es ist ein bisschen unfair, diese "Fehlermeldung" auf einen neuen Coder fallen zu lassen ... –

+0

@AndrewHenle: Ich war hauptsächlich danach, nicht einmal Codeformatierung zu verwenden. Es war schwer zu erkennen, woher die Nachricht stammt, bevor sie bearbeitet wurde. Schade, dass es nicht OP war; Solche Änderungen sollten vom Autor vorgenommen werden; zumindest zeigt das, dass er daran interessiert ist, eine Antwort zu bekommen. Aber da er nicht die erforderlichen Informationen hinzufügt, nehme ich an, dass er es nicht ist. – Olaf

Antwort

2

Es sieht so aus, als ob Sie den Heapspeicher beschädigt haben, wahrscheinlich weil Sie gut über das Ende eines malloc() 'd Speichers hinaus geschrieben haben. Verwenden Sie gdb, um eine Rückverfolgung Ihrer Funktionsaufrufe zu erhalten, und sie können Ihnen beim Debuggen helfen. Um ein Zurückverfolgungs des Programms zu erhalten, vorausgesetzt, es wird myprog genannt, geben Sie Folgendes:

gdb myProg 
run 

, nachdem es diese Ausnahme bekommt, Typ:

bt 

Da Sie wahrscheinlich Speicher mit Füßen treten, in dem der Fehler aufgetreten möglicherweise nicht ein Teil dieses Traceback-Stacks, aber es ist ein guter Anfangspunkt. Wenn dies nicht hilft, dann verwenden Sie entweder valgrind oder memwatch, beide werden here beschrieben und diese Tools werden Ihnen sagen, wo Sie über das Ende des Speichers hinaus schreiben, was zu der Beschädigung und dem Kernspeicherauszug führt.

Verwandte Themen