1

我在递归循环中创建了分段错误,但不明白为什么。有人可以帮助我吗?

struct node{
int value;
    int order;
    struct node *left;
    struct node *right;
};

typedef struct node node_t;

node_t array[10];

void createTree(node_t **p, int order){
   (*p)->value = rand()%10;
   (*p)->order = order;
   printf("%i", (*p)->value);
   printf(" ");
   printf("%i\n", (*p)->order);

   if (!order){
       (*p)->left = NULL;
       (*p)->right = NULL;
       return; 
   }
//I believe that here is the origin of the problem...     
createTree(&(*p)->left, order-1);
createTree(&(*p)->right, order-1);
}

int main(void)
{
node_t *root = &array[0];
srand(time(NULL));
createTree(&root, 1);
printf("%i\n", root->value);
return 1;
}
4

2 回答 2

4

问题是

node_t array[10];

您正在创建 10 个节点,并且由于该数组是在文件范围(全局)中声明的,因此它是零初始化的,因此rightleft指针的值将是NULL.

现在

createTree(&(*p)->left, order-1);

在这个你传递左节点的地址。

在这份声明中

(*p)->value = rand()%10;

*pNULL并且取消引用会NULL产生分段错误。

于 2013-03-24T18:36:39.597 回答
0

我看不到你在哪里设置leftright成员。您将它们设置为NULLiforder为零,否则您根本不设置它们。然而,您将这些成员的地址作为参数递归传递。显然,这样的地址无法访问,您的代码就是这样做的。

你期望它如何工作?

于 2013-03-24T18:35:23.007 回答