Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何防止结构被破坏?_C - Fatal编程技术网

C 如何防止结构被破坏?

C 如何防止结构被破坏?,c,C,我急需帮助。我已经做了20多个小时了。基本上,我能够将信息扫描到结构中,但在函数完成后,信息会被破坏。我需要它去梅因。我该怎么做 struct tracks_{ char *tracks_title; int playlist_hits; }; struct album_ { int num_tracks; int *tracks; }; typedef struct album_ album; typedef struct tracks_ tracks; album *p

我急需帮助。我已经做了20多个小时了。基本上,我能够将信息扫描到结构中,但在函数完成后,信息会被破坏。我需要它去梅因。我该怎么做

struct tracks_{
  char *tracks_title;
  int playlist_hits;
};

struct album_ {
  int num_tracks;
  int *tracks;
};

typedef struct album_ album;
typedef struct tracks_ tracks;

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

  int number_of_album,number_of_tracks,number_of_charaters;
  int i,j;

  /*Gets the first number, which tell me how much albums there are*/
  fscanf(album_file,"%d", &number_of_album);

  album *all_albums_p = (album *)malloc(sizeof(album)*number_of_album);

  for(j=0;j<number_of_album;j++){
    for(i=0;i<all_albums_p[j].num_tracks;i++){
        /*This number tell me how many characters there are*/
        fscanf(album_file,"%d", &number_of_charaters);

        /*allocates memory*/
        all_albums_p[j].tracks = (int *)calloc(all_albums_p[j].num_tracks,sizeof(int));
        all_albums_p[j].tracks[i] = (char *)calloc(number_of_charaters+6,sizeof(char));


        fscanf(album_file, "%[^\n]s", all_albums_p[j].tracks[i]);

        /*Prints the tracks perfectly*/
        printf("%s\n",all_albums_p[j].tracks[i]);

        /*Sets playlist_hits 0*/
        all_tracks_p[i].playlist_hits = 0;
    }
  }
    return all_albums_p;
}

main(){
  int *number_of_albums,a;

  album *all_tracks_ptr;

  all_tracks_ptr = pharse_album(album_file,number_of_albums);

  int number_of_tracks[*number_of_albums];

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

      /*Where the errors falls*/
      printf("%s",all_tracks_ptr[1].tracks[1]);

    }


    transaction(transaction_file);
  }
}
struct跟踪_{
char*轨道和标题;
int playlist_hits;
};
结构相册{
int num_轨道;
int*轨道;
};
typedef结构相册\相册;
typedef结构轨迹\轨迹;
相册*相册(文件*相册文件,整数*相册数){
专辑的整数、曲目数、角色数;
int i,j;
/*获取第一个数字,它告诉我有多少相册*/
fscanf(相册文件“%d”和相册的编号);
专辑*所有专辑p=(专辑*)malloc(专辑大小)*专辑数量);

对于(j=0;j
all_albums\u p[j]。曲目=(int*)calloc(all_albums\u p[j]。num_曲目,sizeof(int));

这会在
i
的每次迭代中执行,分配新内存并泄漏旧内存及其存储的数据。您必须将其从内部循环中移出

另一个主要问题是您没有返回相册的数量,例如:

*number_of_albums = number_of_album;

all_albums_p[j]。曲目=(int*)calloc(all_albums_p[j]。num_曲目,sizeof(int));

这会在
i
的每次迭代中执行,分配新内存并泄漏旧内存及其存储的数据。您必须将其从内部循环中移出

另一个主要问题是您没有返回相册的数量,例如:

*number_of_albums = number_of_album;

如果在
pharse_album()
方法的底部打印所有内容,该方法是否有效?
album.tracks
定义为
int*
(用作
int
的数组)。但是您正在将
char*
放入数组元素中。这不是您要问的问题,但它表明代码中还有其他问题需要处理。@twain249否如果我在循环外打印它,它将不起作用。如果您打印
pharse_相册()底部的所有内容,它会起作用吗
method?
album.tracks
定义为
int*
(用作
int
的数组)。但您正在将
char*
放入数组元素中。这不是您要问的问题,但它表明代码中还有其他问题需要处理。@twain249不,如果我在循环外打印它,它将不起作用。修复了此问题,谢谢。但我主要关心的是如何将其移出pharse_相册()函数。在pharse_album()函数结束之前,这些结构就被销毁了。您通过覆盖函数中的指针来销毁了它们。另外,请参阅更新我返回的数字只是忘记复制该部分=)谢谢!!!你不知道我有多感激你的帮助!我花了20多个小时在这上面…我内心在哭泣…太感谢了!修复了这个,谢谢。但是我主要关心的是把它从pharse_album()函数之外。在pharse_album()之前,结构正在被破坏函数甚至结束。你通过覆盖函数中的指针破坏了它们。另外,请参阅更新我返回的数字只是忘记复制该部分=)谢谢!!!你不知道我有多感激你的帮助!我花了20多个小时在这上面…我内心在哭泣…非常感谢!