Ошибка сегментации - очередь не инициализируется - PullRequest
0 голосов
/ 30 сентября 2019

Приведенный выше код вызывает ошибку сегментации, и я пытаюсь понять, где она находится. Очередь не инициализируется. Я долго искал код и не могу определить, что идет не так.

typedef struct node node;

struct node
{
int data;
node *link;
};

typedef struct list
{
node *head;
node *tail;
int number_of_nodes;
}s_list;

typedef struct queue
{
s_list *ptr_list;
}queue;

void list_initialize(s_list* ptr_list)    //debugger says this line is a problem? But seems fine to me?
{
    ptr_list->head=NULL;
    ptr_list->tail=NULL;    
    ptr_list->number_of_nodes=0;
}
void queue_initialize(queue* queue_list)
{
list_initialize(queue_list->ptr_list);
}
int main()
{
queue queue;
queue_initialize(&queue);     //Have used a debugger and this isn't succesfull.
}

Я не могу изменить имена переменных или структуры, потому что это часть задания, которое я должен заполнить.

Я попытался изменить функцию queue_initialization на:

void queue_initialize(queue* queue_list)
{
    queue_list=malloc(sizeof(queue));
    list_initialize(queue_list->ptr_list);
}

Все еще существует ошибка сегментации

1 Ответ

3 голосов
/ 30 сентября 2019

ptr_list никогда не инициализируется, поэтому в list_initialize () вы пишете в произвольную память. В queue_initialize () вам нужно что-то вроде этого:

void queue_initialize(queue* queue_list)
{
    queue_list->ptr_list = malloc(sizeof(s_list));
    list_initialize(queue_list->ptr_list);
}
...