gpt4 book ai didi

c - 段错误w/指针指向C中不同结构中的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:47 24 4
gpt4 key购买 nike

我正在尝试创建优先级队列链表,但一直遇到段错误。

我的结构定义如下

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

下面还有我的导致错误的enqueue方法

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*/


/*.......*/
}

我猜我没有正确地动态分配我的内存,但是我编写函数的方式是从一个结构指向下一个结构,所以有没有办法解决这个问题?

最佳答案

在您的代码中,init()q->tail 初始化为 NULL。而您正在尝试执行 q->tail->next = newNode。对于第一个节点,它本质上意味着 NULL->next = newNode。这就是段错误的原因。

你的 enqueue() 应该是这样的:

void enqueue(Priority_queue *const q, const char new_element[], int priority) {

/*......*/

Qnode *newNode = (Qnode*) malloc(sizeof(Qnode));
if (q->tail) { /*Do this, only When first node is already allocated*/
q->tail->next = newNode;
}
q->tail = newNode;

/*.......*/

}

关于c - 段错误w/指针指向C中不同结构中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52886004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com