C 如何防止结构被破坏?
我急需帮助。我已经做了20多个小时了。基本上,我能够将信息扫描到结构中,但在函数完成后,信息会被破坏。我需要它去梅因。我该怎么做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
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;jall_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多个小时在这上面…我内心在哭泣…非常感谢!