Anzeige:
Ergebnis 1 bis 2 von 2

Thema: [C] Testprogramm zu Modul stürzt ab!

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.02.2004
    Beiträge
    113

    Unhappy [C] Testprogramm zu Modul stürzt ab!

    Hey Amigos, wie geht's?

    Ich habe ein C-Modul geschrieben, das die Sortierung von Struct-Arrays und verketteten Listen vereinfachen soll, und eine Testimplementation dafür. Beides lässt sich ohne Fehlermeldungen kompilieren, aber fish.c kackt immer mit nem Segfault ab, soweit ich das mit gdb beurteilen kann bei Zeile 98!

    Kann mir jemand helfen? Ich kenn mich mit Pointern nämlich noch nicht sooo gut aus!
    Gruß,
    dev

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    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
    IRC: irc.euirc.net #tux

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •