Я пытаюсь написать функцию, которая может читать некоторую информацию из файла в узел в двусвязном списке. Формат данных каждого узла выглядит следующим образом.Запись в связанные списки с вложенными структурами
структура (названная запись)
художника
альбома
песня
жанр
songLength (Это еще одна структуры, которая содержит минуты и секунды)
прослушиваний
рейтинга
void load(FILE *file, Node *head)
{
char tempArtist='\0', tempAlbum='\0', tempTitle='\0', tempGenre='\0'
,tempSpace='\0',tempMins='\0',tempSecs='\0';
SongLength *tempLength=NULL;
int tempPlay=0, tempRating=0,test=0;
tempLength = (SongLength*)malloc(sizeof(SongLength));
fscanf(file,"%s",&tempArtist);
fscanf(file,"%s",&tempAlbum);
fscanf(file,"%s",&tempTitle);
fscanf(file,"%s",&tempGenre);
fscanf(file,"%s",&tempMins);
fscanf(file,"%s",&tempSecs);
fscanf(file,"%s",&tempPlay);
fscanf(file,"%s",&tempRating);
fscanf(file,"%s",&tempSpace);
tempLength->mins=tempMins;
tempLength->secs=tempSecs;
head->data->album=tempAlbum; // breaks here
head->data->artist=tempArtist;
head->data->genre=tempGenre;
head->data->song=tempTitle;
head->data->length=tempLength;
head->data->played=tempPlay;
head->data->rating=tempRating;
}
Это моя текущая функция нагрузки. При попытке сохранить эти значения в данных узлов я получаю нарушение доступа.
Вот мои Структуры для легкого воспроизведения
typedef struct songlength
{
int mins;
int secs;
}SongLength;
typedef struct record
{
char artist;
char album;
char song;
char genre;
struct songlength *length;
int played;
int rating;
}Record;
typedef struct node
{
struct node *pPrev;
struct node *pNext;
struct record *data;
}Node;
makeNode
Node *makeNode(Record *newData)
{
Node *temp = NULL;
temp=(Node*)malloc(sizeof(Node));
temp->data=newData;
temp->pNext=NULL;
return temp;
}
Если любая путаница возникает просто дайте мне знать! Также это мой первый опыт работы с динамической памятью, поэтому будьте осторожны: P
Спасибо!
Когда вы используете динамическую память, вам нужно явно указать '' malloc'''. У вас возникла проблема, поскольку вы объявляете '' tempLength'' в качестве указателя, а затем никогда не выделяете для нее никакой памяти. –
@SimonGibbons Будет ли память еще не выделена при инициализации головного узла?(бывает в основном) – user3482104
Да возможно (но я не вижу этот код), однако, когда вы делаете 'tempLength-> mins = tempMins;' 'вы используете' 'tempLength'', который ничего не знает о какой-либо памяти вы ранее выделили эту структуру. –