线程 1 收到信号 SIGSEGV,分段错误

Thread 1 received signal SIGSEGV, Segmentation fault

我尝试使用 gdb 调试我的代码:我收到错误提示

Thread 1 received signal SIGSEGV, Segmentation fault

这是我的代码:

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

typedef struct queue {
    List *ptr_list;
} Queue;

void queue_initialize(Queue *queue_list) {
    //TODO
    printf("hello inside queue_initialize\n");  
    list_initialize(queue_list->ptr_list);
    printf("hello after queue_initialize\n");
    return;
}

void list_initialize(List *ptr_list) {
    //TODO
    printf("hello in list_initialize\n");
    ptr_list->head = 0;
    printf("hello\n");
    ptr_list->tail = 0;
    printf("hello\n");
    ptr_list->number_of_nodes = 0;
    printf("hello after list_initialize\n");
}

当我调用函数时 queue_initialize(Queue *queue_list) 我得到这个输出

hello before queue_initialize
hello inside queue_initialize
hello in list_initialize

但预期输出是:

hello before queue_initialize
hello inside queue_initialize
hello in list_initialize
hello 
hello
hello after list_initialize

谁能告诉我这段代码有什么问题吗? 非常感谢你的努力,请帮助我快速

我很确定这些行中存在错误:

ptr_list->head = 0;
ptr_list->tail = 0;
ptr_list->number_of_nodes = 0;

您必须先分配 List 结构,然后才能初始化其成员:

#include <stdio.h>
#include <stdlib.h>

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

typedef struct queue {
    List *ptr_list;
} Queue;

void list_initialize(List *ptr_list) {
    //TODO
    printf("hello in list_initialize\n");
    if (ptr_list) {
        ptr_list->head = 0;
        printf("hello\n");
        ptr_list->tail = 0;
        printf("hello\n");
        ptr_list->number_of_nodes = 0;
    }
    printf("hello after list_initialize\n");
}

void queue_initialize(Queue *queue_list) {
    printf("hello inside queue_initialize\n"); 
    if (queue_list) {
        queue_list->ptr_list = malloc(sizeof(List));
        list_initialize(queue_list->ptr_list);
    }
    printf("hello after queue_initialize\n");
}