【问题标题】:Thread 1 received signal SIGSEGV, Segmentation fault线程 1 收到信号 SIGSEGV,Segmentation fault
【发布时间】:2021-01-16 15:51:48
【问题描述】:

我尝试使用 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;

【问题讨论】:

    标签: c linked-list segmentation-fault queue malloc


    【解决方案1】:

    您必须在初始化其成员之前分配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");
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2021-03-18
      • 1970-01-01
      • 2011-12-26
      相关资源
      最近更新 更多