Добрый день. Пишу такую вещь: рекурсивно обходит заданный каталог, находя mp3-файлы, и вытаскивает из них тэги. Часть, отвечающая за вытаскивание, расположена в отдельной функции. Вот она:
static struct track_info* medialib_get_track_info (const char *filename) {
TagLib_File *file = taglib_file_new_type(filename, TagLib_File_MPEG);
TagLib_Tag *tag = taglib_file_tag(file);
struct track_info *info = malloc(sizeof(*info));
info->title = taglib_tag_title(tag);
info->artist = taglib_tag_artist(tag);
info->album = taglib_tag_album(tag);
info->genre = taglib_tag_genre(tag);
info->year = taglib_tag_year(tag);
info->trackno = taglib_tag_track(tag);
/*
unsigned char *title = taglib_tag_title(tag);
unsigned char *artist = taglib_tag_artist(tag);
unsigned char *album = taglib_tag_album(tag);
unsigned char *genre = taglib_tag_genre(tag);
unsigned int year = taglib_tag_year(tag);
unsigned int trackno = taglib_tag_track(tag);
*/
/*info->title = malloc(sizeof(*info->title) * strlen(title));
info->artist = malloc(sizeof(*info->artist) * strlen(artist));
info->album = malloc(sizeof(*info->album) * strlen(album));
info->genre = malloc(sizeof(*info->genre) * strlen(genre));*/
/*strcpy(info->title, title);
strcpy(info->artist, artist);
strcpy(info->album, album);
strcpy(info->genre, genre);
info->year = year;
info->trackno = trackno;*/
//taglib_tag_free_strings();
taglib_file_free(file);
return info;
}
Так — работает. А если членам структуры не присваивать непосредственно значения, возвращаемые функциями чтения тегов, а выделять память через malloc() и потом копировать туда эти значения (закомментированная часть кода), то прога начинает рандомно крашиться, вылетать ошибки сегментирования, шины, invalid fastbin entry (free) и т.д. Почему так?