在我的C代码中出现段错误的原因是什么?
问题描述:
当我做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未初始化。在进入for-loop之前,您需要在堆上预留内存。
+0
哦yesss ...我需要初始化指向队列的指针。 .. – YohanRoth 2014-11-21 17:01:23
答
您的queue_arr
未分配,因此分配queue_arr[i]
您违反了内存。
'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