我正在尝试用C编写通用队列实现。对于初始化部分,这就是我所拥有的:
<svg width="300" height="100" viewBox="0 0 300 100">
<path d="M-10 0 C 100 70 200 50 310 40" stroke="orange" fill="transparent"
stroke-width="60" shape-rendering="auto"/>
<text x="10" y="90">(auto)</text>
</svg>
<svg width="300" height="100" viewBox="0 0 300 100">
<path d="M-10 0 C 100 70 200 50 310 40" stroke="orange" fill="transparent"
stroke-width="60" shape-rendering="crispEdges"/>
<text x="10" y="90">(crispEdges)</text>
</svg>
为了测试实现,我写了以下内容:
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
时生成的。这种行为的原因是什么?
答案 0 :(得分:3)
至少写
struct queue* qp;
queue_init(&qp, 1, 1);
还不清楚为什么有声明
void **elements;
而不仅仅是
void *elements;