首页 > 解决方案 > C 程序 - 二叉树的底视图

问题描述

我是一名 Java 开发人员,但我的任务是在 C 中为二叉树的底视图编写代码。我必须完成void bottomView(btree* root)功能,但它在调用时给出了 SEGMENTATION FAULT void initializeQueue(queue* q)。实际上我知道如何在 Java 中做到这一点,但我是 C 新手,所以很难解决这个问题。我知道这是一些内存分配问题。struct queue&的主体void initializeQueue(queue* q)如下,我不允许更改它们。请帮助:)

typedef struct queue{
  btree* node[67];
  int front;
  int rear;
}queue;
void initializeQueue(queue* q){
  int i;
  for(i=0;i<67;i++) q->node[i] = NULL;
  q->front=-1;
  q->rear=-1;
}
void bottomView(btree* root){
  int view[67];
  queue* q;
  //initializeQueue(q);  Calling this gives SEGMENTATION FAULT
}

标签: c

解决方案


这个:

queue* q;

在一个没有指向任何合理的地方的未初始化的指针中。*q使用或取消引用它q->...会导致未定义的行为,通常是崩溃。

在堆栈上创建一个未初始化的队列对象,然后使用 address-of 运算符创建指向它的指针&并将该指针传递给初始化函数:

queue q;       // uninitialized stack object

initializeQueue(&q);

另一种方法是在堆上创建队列malloc,但您必须free稍后显式创建:

queue *q = malloc(sizeof(*q));    // uninitialized heap object
                                  // TODO: test for NULL

initializeQueue(q);

// use the queue q

free(q)

您可以结合分配和初始化:

queue *createQueue(void) 
{
    queue *q = malloc(sizeof(*q));

    initializeQueue(q);

    return q;
}

推荐阅读