c - 分段错误 - 队列不会初始化
问题描述
上面的代码抛出了一个分段错误,我绞尽脑汁想看看它在哪里。队列未初始化。我一直在看代码最长时间,我无法确定出了什么问题。
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);
}
仍然存在分段错误
解决方案
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);
}
推荐阅读
- python - 如何在熊猫的每一行中使用多个(类似字典的)json对象来分解列?
- nghttp2 - 如何使用 ngthttp2 发送帖子数据?
- ruby - 如何在 Ruby 中以编程方式检测证书问题
- boolean - 更改 JSON 布尔值(或删除双引号)
- django - 禁止直接分配到多对多集合的前端。改用 variant.set()
- python - 检索图像的隐藏 URL(没有附件的图像,仅 url)
- visual-studio - 如何让 ApprovalTests 创建 UTF-8 文件
- c - 代码由于类型错误而无法编译但未给出任何运行时错误的示例
- typescript - 没有明确未定义的打字稿可选字段
- django - 根据先前选择的选项显示 Django Fieldset 值?