当我做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;
答案 0 :(得分:2)
queue_arr 未初始化。在进入for循环之前,需要在堆上保留内存。
答案 1 :(得分:1)
您的queue_arr
未分配,因此指定queue_arr[i]
您违反了内存。