*** glibc detected *** double free or corruption (!prev): [...]

Jan 'RedBully' Seiffert redbully at cc.fh-luh.de
Sun May 4 03:35:02 CEST 2008


Jan-Benedict Glaw wrote:
> On Fri, 2008-05-02 08:19:08 +0200, Andre Landwehr <andrel at cybernoia.de> wrote:
>> On Thu, 1 May 2008 19:31:29 +0200
>> Maximilian Wilhelm <max at rfc2324.org> wrote:
>>> Am Thursday, den  1 May hub Stefan U. Hegner folgendes in die Tasten:
>>>> wollte gerade mit mondoarchive (v2.2.0-881; etch-amd54) ein Backup
>>>> ziehen, da bekam ich den o.g. Fehler:
>>>>
>>>>     *** glibc detected *** double free or corruption (!prev): 0x00000000005510a0 ***
>>>                              ~~~~~~~~~~~
>>>>     SIGABRT signal received from OS
>>>>     Abort - probably failed assertion. I'm sleeping for a few seconds so you can rea
>>> Das kann ein einfacher Programmierfehler sein.
>>> Sprichst Du C?
> 
> Ists vermutlich auch...
> 
>> Alternativ das (debug-gebaute) Programm mal in valgrind laufen lassen
>> wenn gdb nichts findet. Ein eindeutiges double free wird gdb vielleicht
>> noch auf die Reihe bekommen, aber spätestens wenn irgendwo Speicher
>> überschrieben wird, bekommt er nur noch mit wo es knallt und nicht wo
>> die Ursache dafür war.
> 
> Aus dem Bauchgefühl heraus würd' ich sogar eher vermuten, daß es
> Schreiben außerhalb des allokierten Bereiches war :)  Double free ist
> IMHO in der Praxis eher selten.
> 
> Gerade im Fall von corruption ist gdb hier erstmal nicht direkt
> hilfreich: die libc SIGABRTed das Programm zwar, wenn sie das Problem
> *entdeckt*,

*Vor die Stirn patsch*
Wenns aber naeherungsweise immer die gleiche Adresse ist (randomisation 
ausschalten), kann man mit GDB nen Brakpoint drauf setzen (ja, auf 
Zugriffe auf eine Adresse), zumindest hab ich das mal gehoert...

> aber das sagt rein garnichts aus: Zu diesem Zeitpunkt sind
> die libc'schen Datenstrukturen ja schon lange überschrieben und den
> schuldigen Programmcode macht man dann auch nicht mehr aus.
> 
> Mit valgrind oder anderen malloc-Checkern kommt man da in jedem Fall
> weiter.
> 

Stimmt, aber ist so unfruchtbar wenn die Pro-Gamer da vorher nie selbst 
mal "aufgeraeumt" haben: Man ersaeuft meist in Fehlermeldungen...

> MfG, JBG
> 
> 
Gruss
	Jan

-- 
mysql> CREATE TABLE log (noted DATE NOT NULL);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO log SET noted = '0000-00-00';
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM log WHERE noted IS NULL AND noted IS NOT NULL;
+------------+
| noted      |
+------------+
| 0000-00-00 |
+------------+
1 row in set (0.00 sec)



More information about the Linux mailing list