2012-03-31 6 views
0

Ich habe keine Ahnung, warum ich Segmentierungsfehler bekomme, wenn ich versuche, auf all_tracks_ptr[1].tracks[1].tracks_title außerhalb der Funktion zuzugreifen. Dies ist nur ein kleiner Teil meines gesamten Codes. Wie behebe ich das? oder Was ist eine bessere Möglichkeit, die Informationen, die ich gescannt habe, von den Dateien in main zurückzugeben?Warum ist dies außerhalb der Funktion nicht zugänglich?

album *pharse_album(FILE *album_file,int *number_of_albums){ 
    int number_of_album,number_of_tracks,number_of_charaters; 
    int i,j; 
    char dummy_space; 

    fscanf(album_file,"%d", &number_of_album); 

    *number_of_albums = number_of_album; 

    album *all_albums_p = (album *)malloc(sizeof(album)*number_of_album); 
    for(j=0;j<number_of_album;j++){ 
     fscanf(album_file,"%d", &all_albums_p[j].num_tracks); 
      tracks *all_tracks_p = (tracks*)malloc(sizeof(tracks)*all_albums_p[j].num_tracks); 
     for(i=0;i<all_albums_p[j].num_tracks;i++){ 
      fscanf(album_file,"%d", &number_of_charaters); 
      all_albums_p[j].tracks = (tracks *)malloc(sizeof(tracks)*all_albums_p[j].num_tracks); 
      all_albums_p[j].tracks[i].tracks_title = (char *)malloc(sizeof(char)*(number_of_charaters+6)); 
      fscanf(album_file," ",dummy_space); 
      fscanf(album_file, "%[^\n]s", all_albums_p[j].tracks[i].tracks_title); 

      printf("%s\n",all_albums_p[j].tracks[i].tracks_title); 
     } 
     } 
     return all_albums_p; 
    } 


    main(){ 

     all_tracks_ptr = pharse_album(album_file,number_of_albums); 

     for(i=0; i < *number_of_albums ;i++){ 
      printf("%d : %d\n",i,all_tracks_ptr[i].num_tracks); 
      printf("%s",all_tracks_ptr[1].tracks[1].tracks_title); 

     } 
    } 
+5

Sie zeigen uns nicht wo all_tracks_ptr zugewiesen wird – dldnh

+2

In der Tat, wenn der Code für 'main' korrekt ist, ist es nicht zugewiesen. OP, bitte poste den kleinsten Code, der, wenn er ausgeführt wird, dein Problem demonstriert - das heißt, mach bitte ein komplettes Beispiel deines Problems und entferne dann alle Teile des Codes, die nicht notwendig sind, um das Problem zu demonstrieren. (In der Tat können Sie den Fehler selbst identifizieren, es ist eine nützliche Technik). –

+0

Habe gerade den Teil hinzugefügt, den all_track_ptr zugewiesen ist. –

Antwort

0

Soweit ich den Code sehen kann, macht nie eine struct tracks_, die ich davon ausgehen, ist das, was ein all_tracks_ptr werden sollte zeigen?

+0

Ja. Ich möchte all_albums_p.tracks.tracks_title zurückgeben. So kann ich das Album_ und seine Tracks_ ausdrucken. –

+0

Ich warte bis Sie den Code posten. Ist der Rückgabewert von 'pharse_album()' ein Album-Array? Wenn ja, wie weiß der Aufrufer der Funktion, wie viele Albumstrukturen sich im Array befinden? – gbulmer

Verwandte Themen