Verkettete Liste, malloc Problem



  • Hi,
    schreibe gerade eine Liste, das Programm muss jedoch jedesmal von Windows geschlossen werden.

    typedef struct node {
                         int wert;
                         struct node *prev,*next;
                         } NODE;
    
    int main(int argc, char *argv[])
    {
      NODE *L,**Q,*last;
      int i,wert=2;
      void output(NODE*), insert_last(NODE*,int);
    
      L = (NODE*) malloc (sizeof(NODE));
      L->prev = 0;
      L->next = 0;
      L->wert = 0;
      last = L;
    
      *Q = (NODE*) malloc (sizeof(NODE));
      (*Q)->prev = L;
      L->next = *Q;
      (*Q)->wert = 1;
      (*Q)->next = 0;  
      last = *Q;
    
      free(Q);
    
      insert_last(last,wert);
    
      system("PAUSE");	
      return 0;
    }
    
    void insert_last(NODE *L, int wert)
    {
         NODE **Q;
         *Q = (NODE*) malloc (sizeof(NODE)); //<-Hier stürzt das Programm ab.
         return;
    }
    

    Sorry dass ich soviel Quelltext poste. Was ich so komisch finde ist, dass in der main-Funktion das malloc Funktioniert. In der Funktion insert_last jedoch nicht.
    Was mache ich falsch?

    Danke.
    F.Saxen



  • du dereferenzierst ja auch einen Pointer, der nicht initialisiert ist! (liegt überhaupt nicht an dem malloc!)

    Ansonsten solltest du den Rückgabewert von malloc nicht casten und darauf prüfen, ob bei malloc ein Fehler aufgetreten ist (Rückgabewert NULL)



  • Hallo !

    Warum eigentlich:

    NODE **Q;
    

    ?

    Muss doch nicht sein, auch nicht bei doppelt verketteten Listen.



  • Mensch bin ich blöd. Klar das dass nicht funktioniert.
    Vielen Dank.
    Falls es noch jemand interessiert, ich habs jetzt so gemacht:

    void insert_last(NODE **L, int wert)
    {
         NODE *Q;
         Q = (NODE*) malloc (sizeof(NODE));
         Q->prev = *L;
         Q->next = 0;
         Q->wert = wert;
         (*L)->next = Q;
         *L = Q;
         return;
    }
    

    MfG
    F.Saxen


Anmelden zum Antworten