为什么我会把核心倾倒?

Lea*_*g C 0 c pointers

请帮我.当我运行这个程序时,我无法弄清楚为什么我会得到一个核心转储.在返回任何东西之前我可以打印all_albums_p得很好.我为什么要来core dumped

#include "music_server.h"

struct album_ {
  int num_tracks;
  char **tracks;
  int **playlist_hits;

};
typedef struct album_ album;

album *parse_album(FILE *album_file,int *number_of_albums){

  int number_of_album,number_of_tracks,number_of_charaters;
  int i,j;
  char dummy_space;
  int *p;

  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);

    all_albums_p[j].tracks = calloc(all_albums_p[j].num_tracks,sizeof(char));
    all_albums_p[j].playlist_hits = calloc(all_albums_p[j].num_tracks,sizeof(int));

    /*Line 27*/ for(i=0;i<all_albums_p[j].num_tracks;i++){

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

      all_albums_p[j].tracks[i] = (char *)calloc(number_of_charaters+1,sizeof(char));
      all_albums_p[j].playlist_hits[i] = (int *)malloc(sizeof(int));
      all_albums_p[j].playlist_hits[i] = 0;
      fscanf(album_file," ",dummy_space);
      fscanf(album_file, "%[^\n]s", all_albums_p[j].tracks[i]);
    }
  }
  return all_albums_p;
}

main(int argc, char *argv[]){

  int i,j;
  int *number_of_albums,*number_of_tracks,a;
  a=0;
  number_of_albums = &a;

  album *all_tracks_ptr;

  album_file = fopen(argv[1],"r");
  transaction_file = fopen(argv[2],"r");

  if((album_file == NULL) || (transaction_file == NULL)){
    printf("Either %s or %s could not be open");
  }else{

    all_tracks_ptr = parse_album(album_file,number_of_albums);


    int number_of_tracks[*number_of_albums];
  }
}
Run Code Online (Sandbox Code Playgroud)

错误:

Bus Error (core dumped)

(gdb) bt
#0  0xff277c9c in _smalloc () from /lib/libc.so.1
#1  0xff277d10 in malloc () from /lib/libc.so.1
#2  0xff263830 in calloc () from /lib/libc.so.1
#3  0x00010dd8 in parse_album (album_file=0xff3675bc,
    number_of_albums=0xffbff894) at functions.c:27
#4  0x00010b80 in main (argc=3, argv=0xffbff90c) at project3.c:19
Run Code Online (Sandbox Code Playgroud)

kee*_*ety 6

您应该sizeof(char*)在下面分配而不是sizeof(char)

all_albums_p[j].tracks = alloc(all_albums_p[j].num_tracks,sizeof(char*));
Run Code Online (Sandbox Code Playgroud)