當我做queue_arr [i] = queue_create()時,我突然想到了段錯誤的原因,一切似乎都沒事。我用調試器檢查了queue_create()返回實際的隊列。內存分配給一個新的隊列..不知道可能是什麼原因!需要幫忙。在我的C代碼中出現段錯誤的原因是什麼?
這裏是主要的代碼片段:
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;
'queue_arr'沒有指向任何有效位置,更不用說'queue_arr [i]'。 – hobbs 2014-11-21 16:59:30
它看起來不像你初始化'queue_arr'本身。 – Michael 2014-11-21 16:59:38
您需要爲'queue_arr'分配內存以指向。目前它尚未初始化,因此取消引用是非法的。 – 2014-11-21 16:59:40