Hi,
mit -Wall compiliert kamen mehrere Warnungen:
Code:
micha@asus:~/bubble.org> gcc -Wall -g -o bubbelfish bubblefish.c fish.c
bubblefish.c: In function `bubblefish':
bubblefish.c:37: warning: suggest parentheses around assignment used as truth value
bubblefish.c:43: warning: suggest parentheses around assignment used as truth value
bubblefish.c:61: warning: suggest parentheses around assignment used as truth value
bubblefish.c:76: warning: `return' with no value, in function returning non-void
fish.c: In function `main':
fish.c:42: warning: missing braces around initializer
fish.c:42: warning: (near initialization for `arel[0]')
fish.c:46: warning: unused variable `lilinext'
fish.c:50: warning: unused variable `dolilinext'
- Die ersten drei Warnungen sind wegen einer Zuweisung statt einem Vergleich.
- In der Funktion bubblefish wird nichts zurückgegeben, Du weist aber in fish.c 112,113 lili und
dolili den nicht vorhandenen Rückgabewert zu.
Dein Programm stürzt nach dem ersten Durchlauf der for-schleife (97) ab, da die Initialisierung in den 2 for-schleifen davor nicht ganz korrekt ist:
Code:
lilistart = (linkedlistelement_t*) malloc(sizeof(linkedlistelement_t));
dolilistart = (doublylinkedlistelement_t*) malloc(sizeof(doublylinkedlistelement_t));
for ( i=1; i<3; i++) {
lili = (linkedlistelement_t*) malloc(sizeof(linkedlistelement_t));
/*
* In jedem Durchlauf der Schleife wird lilistart->next erneut alloziierter Speicher
* zugewiesen, anstatt beim zweiten Durchlauf lilistart->next->next, etc...
*/
lilistart->next = lili;
}
for ( i=1; i<3; i++) {
doliliprev = dolili;
dolili = (doublylinkedlistelement_t*) malloc(sizeof(doublylinkedlistelement_t));
dolilistart->next = dolili;
dolili->prev = doliliprev;
}
lili = lilistart;
dolili = dolilistart;
Vorschlag:
Code:
lili = lilistart = (linkedlistelement_t*) malloc(sizeof(linkedlistelement_t));
dolili = dolilistart = (doublylinkedlistelement_t*) malloc(sizeof(doublylinkedlistelement_t));
dolili->prev = NULL;
for ( i=1; i<3; i++)
{
lili->next = (linkedlistelement_t*) malloc(sizeof(linkedlistelement_t));
lili = lili->next;
dolili->next = (doublylinkedlistelement_t*) malloc(sizeof(doublylinkedlistelement_t));
dolili->next->prev = dolili;
dolili = dolili->next;
}
lili = lilistart;
dolili = dolilistart;
Damit läuft das Programm zumindest bis nach der dritten for-Schleife
Abstürzen tuts jetzt in bubblefish.c Zeile 52.
Weiter bin ich jetzt noch nicht, aber vielleicht hilft Dir das schonmal.
Gruß micha
Lesezeichen