【问题标题】:Segmentation fault- queue won't initialize分段错误 - 队列不会初始化
【发布时间】:2020-01-29 22:35:09
【问题描述】:

上面的代码抛出了一个分段错误,我绞尽脑汁想看看它在哪里。队列未初始化。我一直在看代码最长时间,我无法确定出了什么问题。

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);
}

仍然存在分段错误

【问题讨论】:

  • 您已经用“队列未初始化”语句回答了您自己的问题。 - 你需要初始化才能调用list_initialize
  • 使用 malloc 进行队列初始化也不起作用
  • 给变量赋予与该变量类型相同的名称是一种非常糟糕的编程习惯。建议:queue myQueue;
  • NULL 未定义。贴出的代码缺少声明:#include <stddef.h>,一般包含在stdio.h

标签: c linked-list initialization queue singly-linked-list


【解决方案1】:

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多