2012-03-31 28 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 2012-03-31 21:43:55

+2

事实上,如果'main'的代码是准确的,它就不会被分配。 OP,请发布尽可能最小的代码片段,这些代码在运行时演示您的问题 - 也就是说,请提供您的问题的完整示例,然后删除代码中不需要的所有代码以演示问题。 (事实上​​,在这样做的时候,你可能会自己发现错误,这是一种有用的技术)。 – 2012-03-31 21:47:26

+0

刚刚添加了all_track_ptr分配的部分。 – 2012-03-31 21:48:39

回答

0

至于我可以看到代码永远不会作出struct tracks_,我以为就是一个all_tracks_ptr应指向?

+0

是的。我想返回all_albums_p.tracks.tracks_title。这样我就可以打印album_及其tracks_。 – 2012-03-31 22:01:05

+0

我会等到你发布代码。 'pharse_album()'的返回值是否是一个相册数组?如果是这样,函数的调用者将如何知道阵列中有多少专辑结构? – gbulmer 2012-03-31 22:05:30

相关问题