Добрый день. Пишу такую вещь: рекурсивно обходит заданный каталог, находя 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) и т.д. Почему так?






