Segmentation Fault



  • Hallo,
    ich finde den Fehler nicht.

    #include <stdio.h>
    #include <dos.h>
    #include <string.h>
    #include <stdlib.h>

    struct mp3define{
    char *dateiname;
    char *id3tag;
    mp3define *next;

    };
    void mp3add(mp3define *mp3liste,char name[],char titel[]);
    void mp3read(mp3define *mp3liste);

    int main (void)
    {
    mp3define mp3start;
    mp3start=(mp3define
    )malloc(sizeof(mp3define));
    mp3start->next=NULL;
    mp3add(mp3start,"dateiname1","beispieltitel1");
    mp3add(mp3start,"dateiname1","beispieltitel1");
    mp3read(mp3start);
    return 1;
    }

    void mp3add(mp3define *mp3liste,char name[],char titel[])
    {
    mp3define *neu;
    mp3define tempa;
    neu =(mp3define
    )malloc(sizeof(mp3define));
    tempa=mp3liste;
    if(mp3liste->next==NULL)
    {
    mp3liste->next=neu;

    }
    else
    {
    while(tempa->next!=NULL)
    {
    tempa=tempa->next;
    }
    {
    tempa->next=neu;
    neu->next=0;
    }
    neu->next=0;
    neu->dateiname=(char*) malloc(strlen(name)+1);
    strcpy(neu->dateiname,name);
    neu->id3tag=(char*) malloc(strlen(titel)+1);
    strcpy(neu->id3tag,titel);
    }
    }
    void mp3read(mp3define *mp3liste)
    {
    mp3define *temp;
    temp=mp3liste;
    while(temp->next!=0)
    {
    printf("\nAusgabe: %s",temp->id3tag);
    temp=temp->next;
    }
    }

    Es geht eigentlich um die obere Funktion.
    Also dass add

    (WICHTIG: DAS GANZE IST EIN PROGRAMM DASS ICH ABGEBEN MUSS ALS STUDENTENAUFGABE
    DESWEGEN SCHREIBE ICH HIER MEINE FHS NUMMER DAZU FHS16812 DER FH SALZBURG!!! DAS SOLL VERHINDERN DASS JEMAND MEINT DASSS ICH MIR DAS DA RAUSKOPIERT HABE. ICH HAB DAS HIER VERFASST)



  • Benutze die code tags, das ist leichter lesbar.



  • Bitte CPP-Tag verwenden!

    #include <stdio.h>
    #include <dos.h>
    #include <string.h>
    #include <stdlib.h>
    
    struct mp3define{
      char *dateiname;
      char *id3tag;
      mp3define *next;
    };
    
    void mp3add(mp3define *mp3liste,char name[],char titel[]);
    void mp3read(mp3define *mp3liste);
    
    int main (void)
    {
      mp3define *mp3start;
      mp3start=(mp3define*)malloc(sizeof(mp3define));
      mp3start->next=NULL;
      mp3add(mp3start,"dateiname1","beispieltitel1");
      mp3add(mp3start,"dateiname1","beispieltitel1");
      mp3read(mp3start);
      return 1;
    }
    
    void mp3add(mp3define *mp3liste,char name[],char titel[])
    {
      mp3define *neu;
      mp3define *tempa;
      neu =(mp3define*)malloc(sizeof(mp3define));
      tempa=mp3liste;
      if(mp3liste->next==NULL)
      {
        mp3liste->next=neu;
      }
      else
      {
        while(tempa->next!=NULL)
        {
          tempa=tempa->next;
        }
        {
          tempa->next=neu;
          neu->next=0;
        }
        neu->next=0;
        neu->dateiname=(char*) malloc(strlen(name)+1);
        strcpy(neu->dateiname,name);
        neu->id3tag=(char*) malloc(strlen(titel)+1);
        strcpy(neu->id3tag,titel);
      }
    }
    
    void mp3read(mp3define *mp3liste)
    {
      mp3define *temp;
      temp=mp3liste;
      while(temp->next!=0)
      {
        printf("\nAusgabe: %s",temp->id3tag);
        temp=temp->next;
      }
    }
    

    Hast du die Klammern in Zeile 42 und 45 aus einem speziellen Grund eingefügt?



  • #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    struct mp3define{
      char *dateiname;
      char *id3tag;
      struct mp3define *next;
    };
    
    void mp3add(struct mp3define *mp3liste,char name[],char titel[]);
    void mp3read(struct mp3define *mp3liste);
    
    int main (void)
    {
      struct mp3define *mp3start;
      mp3start=(struct mp3define*)malloc(sizeof(struct mp3define));
      mp3start->next=NULL;
      mp3add(mp3start,"dateiname1","beispieltitel1");
      mp3add(mp3start,"dateiname2","beispieltitel2");
      mp3read(mp3start);
      return 1;
    }
    
    void mp3add(struct mp3define *mp3liste,char name[],char titel[])
    {
      struct mp3define *neu;
      struct mp3define *tempa;
    
      tempa=mp3liste;
    
      /* Neues Element erstellen */
      neu =(struct mp3define*)malloc(sizeof(struct mp3define));
      neu->next=NULL;
      neu->dateiname=(char*) malloc(strlen(name)+1);
      strcpy(neu->dateiname,name);
      neu->id3tag=(char*) malloc(strlen(titel)+1);
      strcpy(neu->id3tag,titel);
    
      if(mp3liste->next==NULL)
      {
        mp3liste->next=neu;
      }
      else
      {
        /* Letztes Element suchen und neues Anhängen */
        while(tempa->next!=NULL)
        {
          tempa=tempa->next;
        }
    
        tempa->next=neu;
      }
    }
    
    void mp3read(struct mp3define *mp3liste)
    {
      struct mp3define *temp;
      temp=mp3liste;
      if(temp->next!=NULL)
      {
        do
        {
          /* Da du das erste Element nicht nutzt, musst du das erste Überspringen */
          temp=temp->next;
          printf("Dateiname: %s\n",temp->dateiname);
          printf("ID3Tag: %s\n",temp->id3tag);
        }while(temp->next!=NULL);
      }
    }
    

    So sollte es funktionieren. Schau es dir mal an und wenn du noch Fragen, hast einfach posten. 😉

    Du solltest übrigends den allozierten Speicher wieder löschen, wenn du ihn nicht mehr brauchst. Auch bevor das Programm beendet wird.

    mfg bauerb


Anmelden zum Antworten