2012-03-31 12 views
0

機能外でall_tracks_ptr[1].tracks[1].tracks_titleにアクセスしようとすると、なぜセグメンテーション違反が発生するのかわかりません。これは私の総コードのほんの一部です。これをどうやって解決するのですか?または、ファイルからスキャンした情報をメインに戻すためのより良い方法は何ですか?これはなぜ機能の外でアクセスできないのですか?

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

all_tracks_ptrが割り当てられる場所は表示されません – dldnh

+2

実際、 'main'のコードが正確であれば、それは割り当てられません。 OPを実行したときに、問題の完全な例を示し、問題を示すために必要でないコードの部分をすべて削除してください。 (実際には、これを行う際に、バグを自分で識別することができます。これは有用な手法です)。 –

+0

all_track_ptrが割り当てられている部分を追加しました。 –

答えて

0

は、私の知る限り見ることができるように、コードは、私がall_tracks_ptrが指しべきことであると仮定しstruct tracks_を作ることはありませんか?

+0

はい。私はall_albums_p.tracks.tracks_titleを返したいと思います。そうすれば、album_とそのトラックを印刷することができます。 –

+0

コードを投稿するまでお待ちしております。 'pharse_album()'からの戻り値は、アルバムの配列であることを意図していますか?そうであれば、関数の呼び出し側は配列内にいくつの構造体があるのか​​を知ることができますか? – gbulmer

関連する問題