On Wednesday 15 August 2001 10:35, Matthias Fichtner wrote:
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 ...
SIGBUS ist da schonmal recht ungewöhnlich. Normalerweise verursacht malloc/free SIGSEGV.
Ohne Sourcen kann ich natürlich nur raten:
Versuch mal mit Einzelschritten ranzugehen. Ich hatte solche Probleme oft, wenn ich Schleifen und Verzweigungen falsch designt hatte. Evtl. geht er zu oft durch eine Schleife.
Sehr beliebt sind auch solche Fehler: int *a=malloc(80); //Zuweisung... for (;*a;a++)//tue irgendwas free(a);
Der Fehler: malloc alloziert (zumindest bei glibc) mehr Speicher, als angefordert. Ganz am Anfang speichert es seine Allozierungsliste, die erste Position dahinter wird zurückgegeben. Wenn ein Pointer an free übergeben wird zählt es also ein paar Byte zurück und erwartet dort seine eigenen Daten. In dem Fall oben wird es also auf Nutzerdaten statt auf seine eigenen Zugreifen und logischerweise fehlerhafte Werte bekommen.
Konrad
PS.: das ist im Übrigen keine SunOS Liste.