【发布时间】:2018-10-19 04:42:50
【问题描述】:
我正在尝试创建一个优先队列链表,但一直遇到分段错误。
我的结构定义如下
typedef struct node {
char *new_element;
struct node *next;
int priority;
} Qnode;
typedef struct {
Qnode *top;
Qnode *tail;
int size;
} Priority_queue;
int main() {
Priority_queue q;
init(&q);
enqueue(&q, "hi", 1);
return 0;
}
void init(Priority_queue *const q) {
q->top = NULL;
q->tail = NULL;
q->size = 0;
return 0;
}
下面是我的入队方法导致错误的地方
void enqueue(Priority_queue *const q, const char new_element[], int priority) {
/*......*/
Qnode *newNode = (Qnode*) malloc(sizeof(Qnode));
q->tail->next = newNode; /*causes segmentation fault*/
q->tail = newNode; /*doesn't cause segmentation fault*/
/*.......*/
}
我猜我没有正确地动态分配内存,但是我的函数的编写方式是从一个结构指向下一个结构,所以有没有办法解决这个问题?
【问题讨论】:
-
请使用调试器。
q->tail是什么?添加到队列中的 first 节点会发生什么情况? -
q->tail->next = newNode;: 这里Priority_queue q;你分配了第一个节点,这里Qnode *newNode = malloc(sizeof(Qnode));你分配了第三个节点。第二次分配的时间和地点? -
q->tail被初始化为NULL并且你想访问q->tail->next.....这就是问题所在!您可以先更改q->tail的值,然后再查看q->tail->next
标签: c pointers segmentation-fault