Am Dienstag, 4. Mai 2004 12:23 schrieb Boris Höffgen:
Hallo,
ich habe folgendes Programm welches von einer Folge von n-Zahlen (1,2,....,n) die Primzahlen bestimmt. Das Programm arbeitet mit einer lineraren Liste. Warum kommt nachdem er eine Zahl gelöscht hat, z.B. folgender Output:
Mich verwundert vorallem, dass dein Programm ueberhaupt etwas macht und nicht einfach permanent abstuerzt :). Es steckt voller Speicherleaks und Verweise auf nicht reservierten Speicher.
void delete(int pos, liste *l){ liste_el *t,*s=NULL;
t = (liste_el*)malloc(sizeof(liste_el)); t = l->anf;
Hier reservierst du Speicher (warum eigentlich?) und "vergisst" sofort darauf, wo sich der reservierte Speicher befindet.
t = l->anf; while(t){ if(t->wert == pos ){ s = t->next; free(t); t = s;
Der next-zeiger des Elementes, dass sich vor 'pos' befand zeigt nun auf nicht reservierten Speicher. Moegliche Loesung: if( t->next && t->next->wert == pos ) { s = t->next->next; free(t->next); t->next = s; Da sind aber noch weitere Fehler im Programm! Mein Vorschlag: Lies dir doch nochmal genau durch, was es mit den Zeigern in C auf sich hat und wie die genau funktionieren. Gruesse Matthias