Announcement

Collapse
No announcement yet.

Problem mit Liste erstellen in C "Segmentation fault"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Liste erstellen in C "Segmentation fault"

    Hey Leute, habe angefangen C zu lernen und bin jetzt grad dabei eine eigene Liste zu erstellen und habe jetzt mein erstes Problem:

    In meine Liste schreiben funktioniert anscheinend aber wenn ich sie ausgeben will kriege ich ein 'Segmentaation fault'


    list.c
    Code:
    struct knoten *neuerKnoten;
    neuerKnoten=malloc(sizeof(struct knoten));
    neuerKnoten->wert=wert;
    neuerKnoten->naechstesElement = NULL;
    
        if(*liste == NULL){
    
        *liste = neuerKnoten;
    
        } else{
    
            struct knoten *element=*liste;
            while(element -> naechstesElement != NULL){
    
            element =element -> naechstesElement;
    
        }
    
        element ->naechstesElement=neuerKnoten;
    
        }
    
    
    }
    
    void ausgeben (struct knoten *liste){
    
        while(liste =! NULL){
    
            printf("%i\n", liste->wert);
            liste=liste->naechstesElement;
    
        }
    
    
    }
    list.h
    Code:
    #ifndef LIST_H_INCLUDED
    #define LIST_H_INCLUDED
    
    struct knoten{
        int wert;
        struct knoten *naechstesElement;
    
    }
    void hinzufuegen(struct knoten **liste,int wert);
    void ausgeben(struct knoten *liste);
    
    ;
    main.c

    Code:
    #include "list.h"
    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    
        struct knoten *meineListe=NULL;
        hinzufuegen(&meineListe,4);
        hinzufuegen(&meineListe,24);
        hinzufuegen(&meineListe,7);
        hinzufuegen(&meineListe,17);
        ausgeben(meineListe);
    
    return 0;
    }
    kp woran es liegt. Lerne es mit dem Buch Programmieren für einsteiger Markus Neumann .
    hab das Beispiel 3 x durchgeguckt aber habe keinen Fehler gefunden.

    lg

    n4se


  • #2
    Nutze die STL und dort einen Vector
    https://de.wikibooks.org/wiki/C%2B%2...ntainerklassen

    Ansonsten debugge dein Programm. Irgendein Zeiger wird Null sein oder auf einen ungültigen Speicher verweisen
    Christian

    Comment


    • #3
      Hey erstmal danke für deine Antwort. STL ist doch für C++ und nicht für C?!
      Es geht auch grad eher darum die Konzepte hinter den Bibiliotheken zu verstehen.

      also beim debuggen kommt raus das es in der funktion ausgeben() den fehler gibt checke aber immer noch nicht wieso:

      Code:
      printf("%i\n ", liste->wert);

      Comment


      • #4
        Der Übergang C zu C++ ist fließend und dem Compiler ist es wurscht.
        Zumal heutzutage kaum ein Grund mehr besteht in C/C++ zu programmieren (Hardware, Treiber)

        Wenn du obige Zeile identifiziert hast, dann musst du doch im Debugger sehe können, was in liste->wert drin ist
        Christian

        Comment


        • #5
          Also ich habe das mal ausgeschrieben:
          Code:
          printf("%i", liste->wert);
              liste=liste->naechstesElement;
              printf("%i", liste->wert);
              liste=liste->naechstesElement;
              printf("%i", liste->wert);
              liste=liste->naechstesElement;
              printf("%i", liste->wert);
              liste=liste->naechstesElement;
          das funktioniert d.h meine Liste wird gefüllt füge ich das nochmals hinzu bekomme ich mein Segmentation fault. Weil da nix mehr is!

          D.h. irgendwas mit der While schleife scheint nicht in ordnung!

          im debugger steht ausgeben(liste=0x0)

          Comment


          • #6
            Würde nicht sagen, dass die Schleife falsch ist; vielmehr das hinzufügen könnte die Ursache sein
            Christian

            Comment


            • #7
              kp wenn ich es mit schleife schreibe, dann printed er gar nichts aus.
              wenn ich es so ausschreibe dann printed er mir die werte aus. hänge da jetzt komplett

              Comment


              • #8
                So habs hinbekommen hab eine Fubnnktion länge gebaut und mein ausgeben so geändert.

                Aber schön is was anderes wenn jemand noch nen Plan hat warum es oben nicht funktionieren wollte dann wäre ich sehr dankbar....


                Code:
                void ausgeben (struct knoten *liste){
                    int i=0;
                    int l=laenge(liste);
                    while(i<l){
                
                    printf("%i\n", liste->wert);
                    liste=liste->naechstesElement;
                    i++;
                
                    }
                int laenge(struct knoten *liste){
                
                    int i=0;
                    while(liste != NULL){
                
                    i++;
                    liste=liste->naechstesElement;
                
                    }
                    return i;
                
                }

                Comment

                Working...
                X