在我的C代码中获取段错误的原因是什么?

时间:2014-11-21 16:57:13

标签: c

当我做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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您的queue_arr未分配,因此指定queue_arr[i]您违反了内存。