gpt4 book ai didi

c - 我的 C 代码中出现段错误的原因是什么?

转载 作者:行者123 更新时间:2023-11-30 18:40:10 25 4
gpt4 key购买 nike

当我执行queue_arr [i] =queue_create()时,我很困惑为什么会出现段错误,一切似乎都很好..我用调试器检查了queue_create()返回实际队列。内存被分配给新队列。不知道原因是什么!需要帮助。

这是 main 中的代码片段:

queue_t **queue_arr;
global_array_of_queues = queue_arr;
int i = 0;
for(i = 0; i < number_of_categories; i++){
queue_arr[i] = queue_create(); //<<<------!!! segfault here
}

这是函数:

queue_t *queue_create() {
queue_t *new_queue = calloc(1, sizeof(queue_t));
if (new_queue == NULL){
perror("calloc failed to allocate memory. \n");
exit(-1);
}

if (pthread_mutex_init(&new_queue->mutex, NULL) != 0) {
perror("pthread_mutex_init failed. \n");
exit(-1);
}
if (pthread_cond_init(&new_queue->wait_for_not_empty_queue, NULL) != 0) {
/* signal for our consumers */
perror("pthread_cond_init failed. \n");
exit(-1);
}
if (pthread_cond_init(&new_queue->wait_for_empty_queue, NULL) != 0) {
/* signal for our producer */
perror("pthread_cond_init failed. \n");
exit(-1);
}
new_queue->category = NULL;
new_queue->rear = NULL;

return new_queue;
}

队列类型:

typedef struct queue {
pthread_mutex_t mutex;
pthread_cond_t wait_for_not_empty_queue;
pthread_cond_t wait_for_empty_queue;
char *category;
struct queue_node *rear;
} queue_t;

不确定它是否会影响某些内容,但我还声明了指向我的队列的全局指针:

extern queue_t **global_array_of_queues;

enter image description here

最佳答案

queue_arr 未初始化。在进入 for 循环之前,您需要在堆上保留内存。

关于c - 我的 C 代码中出现段错误的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27066473/

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