malloc内部函数导致SIGSEV

时间:2017-04-07 13:04:03

标签: c pointers malloc

我正在尝试用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时生成的。这种行为的原因是什么?

1 个答案:

答案 0 :(得分:3)

至少写

struct queue* qp;
queue_init(&qp, 1, 1);

还不清楚为什么有声明

void **elements;

而不仅仅是

void *elements;