gpt4 book ai didi

c - 如何防止结构被破坏?

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:59 25 4
gpt4 key购买 nike

我急需帮助。我已经为此工作了 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);
}
}

最佳答案

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

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

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

*number_of_albums = number_of_album;

关于c - 如何防止结构被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com