我试图用C编写一个通用的队列实现的初始化的一部分,这是我有:里面的malloc函数造成SIGSEV
struct queue{
int head;
int tail;
int max_size;
int elem_size;
void **elements;
};
void queue_init(struct queue** q, int max_size, int elem_size){
*q = malloc(sizeof(struct queue));
(*q)->head = (*q)->tail =0;
(*q)->max_size = max_size;
(*q)->elem_size = elem_size;
(*q)->elements = malloc(max_size * elem_size);
}
测试实现,我写了下面:
void klein_test(void){
struct queue** qp;
queue_init(qp, 1, 1);
return;
}
int main(){
klein_test();
}
在试图运行这样的测试时,我得到了一个SIGSEV
。用gdb
检查执行结果,我看到错误信号是在queue_init
的第一次调用malloc
时生成的。这种行为的原因是什么?
指针结构队列** QP;未初始化。 –
'queue_init(qp,1,1);' qp没有在那个时候初始化。 – ThingyWotsit
要载入本地(应该可能是'队列*'类型,您需要通过地址传递它:'queue_init(&qp,1,1);' – ThingyWotsit