Hallo,
(mein Problem ist ein wenig OT, aber sehr wichtig fuer mich.)
Ich bekomme folgende Fehlermeldung beim Ausfuehren meines C-Programms: --- Program received signal SIGBUS, Bus error. 0xff2c607c in t_delete () ---
Der Backtrace sieht folgendermaszen aus: --- (gdb) bt #0 0xff2c607c in t_delete () #1 0xff2c575c in _malloc_unlocked () #2 0xff2c55bc in malloc () #3 0x1f6c8 in createNewActionSetRep (initVal=-1) at my_planner.c:29 ... ---
Meine Funktion createNewActionSetRep() ruft malloc() auf. Die Funktion wird aufgerufen, wenn eine (alte) Instanz einer Struktur geloescht wurde und eine neue benoetigt wird, und zwar kurz darauf. Die Allokierung eines neuen Speicherbereiches (gleichen Typs, Groesze) schlaegt fehl, aber auch nur manchmal, da die Funktion bereits vorher ein paar Mal benutzt worden ist. Der betreffende Sourcecode ist hier skizzenhaft dargestellt:
--- struct S { int foo; } *sp;
/* die Allokierung erfolgt eigentlich in createNewActionSetRep() */ sp = (struct S *) malloc(sizeof(struct S)); free(sp); /* ein paar wenige Anweisungen */ sp = (struct S *) malloc(sizeof(struct S)); ---
Eine Suche im Internet hat nichts weiter als allgemeine Kommentare ergeben, unter anderem, dasz das Problem manchmal auftritt, wenn man denselben Pointer mehrmals free()-ed. Aber der Fall tritt hier nicht ein.
Ich bin fuer jeden Hinweis dankbar, da es wichtig und dringend ist.
Eine dazugehoerige Frage: Wie kann ich statt malloc(3C) die Funktion malloc(3X) benutzen, wie teile ich das dem Compiler mit und wie kann ich das im Objektcode nachpruefen, welche Funktion tatsaechlich benutzt wird?
Infos zur Umgebung: System: SunOS 5.7 Generic_106541-11 sun4u sparc SUNW,Ultra-5_10 Compiler: gcc 2.95.2 und cc (SPARCWorks-5.0/SUNWspro) probiert. #include <stdlib.h> Auch -lmalloc habe ich probiert.
Vielen Dank.
MfG Matthias. --- E-Mail: mf14@inf.tu-dresden.de