Hallo,
da ich aber nur Werte in der Struktur selbst aendere und nie den Pointer, wie in deiner Schleife, kann ich den Fall ausschlieszen, Auszerdem, ich glaube den Fall einer doppelten Freigabe des Speicherbereiches durch ein Flag im Speicherbereich, das dessen Freigabe anzeigt, ausgeschlossen zu haben.
MfG Matthias.
PS: ich weisz, was das fuer eine Liste ist. Entschuldigung. Mir faellt so schnell keine andere Moeglichkeit ein. Das Verfolgen der Liste hat aber gezeigt, dasz einige gute Programmierer eingeschrieben sind. --- E-Mail: mf14@inf.tu-dresden.de
On Wed, 15 Aug 2001, Konrad Rosenbaum wrote:
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.