为什么我的cpp代码显示分段错误?

时间:2018-01-29 00:40:13

标签: c++ data-structures

我尝试为这个问题开发解决方案:此代码是:https://www.hackerrank.com/challenges/tree-level-order-traversal/problem的解决方案。

简而言之:我必须对树进行级别顺序翻转。

不幸的是,我有一个分段错误错误。

我一直在调试但是卡住了!我找不到问题。

我的实施如下:

struct que{
    struct node *a;
    int cap;
    int front;
    int rear;
};
struct que* createq()
{
    struct que *q=(struct que *)malloc(sizeof(struct que));
    q->front=-1;
    q->rear=-1;
    q->cap=1;
    q->a=(struct node *)malloc(sizeof(q->cap));
    return q;
}
struct que* resize(struct que* q)
{   q->cap=q->cap*2;
    q->a=(struct node *)realloc(q->a,sizeof(q->cap));
return q;
}
int isempty(struct que* q)
{
    if(q->front==-1&&q->rear==-1)
        return 1;
    return 0;
}
int isfull(struct que* q)
{
    if((q->rear+1)%q->cap==q->front)
        return 1;
    return 0;
}
void insertion(struct que *q,struct node *n)
{
    if(isempty(q)==1)
    {
        q->front=0;
        q->rear=0;

    }
    if(isfull(q)==1)
    {
       q->a=(struct node *)realloc(q->a,q->cap); 
    }
    q->a[q->rear]=*n;
    q->rear=q->rear+1;
    q->rear=q->rear%q->cap;


}
struct node* del(struct que *q)
{
   struct node *temp;
    (*temp)=q->a[q->front];
    if(q->front==q->rear)
    {
         q->front=-1;
        q->rear=-1;
        return temp;
    }
    q->front= q->front+1;
    q->front=q->front%q->cap;
    return temp; 
}
void levelOrder(node * root) {

  if(root==NULL)
      return;
  struct que *q=createq();
    insertion(q,root);
    struct node *temp;
    while(isempty(q)!=1)
    {
        temp=del(q);
        printf("%d ",temp->data);

        if(root->left!=NULL)
            insertion(q,root->left);
            if(root->right!=NULL)
                insertion(q,root->right);
    }

}

1 个答案:

答案 0 :(得分:2)

q->a=(struct node *)malloc(sizeof(q->cap));

q->a=(struct node *)realloc(q->a,sizeof(q->cap));

肯定sizeof(q->cap),相当于sizeof(int),不是你想要的。

此外:

struct node *temp;
(*temp)=q->a[q->front];

在尝试使用其值之前,需要为temp赋值。