为什么将指针作为函数参数传递时会出现分段错误?

Why am i getting segmentation fault when passing a pointer as a function parameter?

我用 bison 构建了一个 AST,并带有指向 Node 结构的指针:

typedef struct Node {
    enum node_type type;
    Stmt *left;
    struct Node *right;
} Node;

然后我以这种方式在 bison 中打印它:

printf("%s\n",root->right->left->value_s.declaration->value_d.string);
printf("%s\n",root->right->left->value_s.declaration->id);
printf("%s\n",root->right->right->right->left->value_s.stdout->string);

它显示得很好,但我试图用外部函数打印它,然后我得到了分段错误。这是开胃野牛生产:

program: stmts { 
        printf("---- PRINTING AST ----\n");
        $$ =  malloc(sizeof(Node));
        $$->type = NODE_TYPE_NODE;
        $$->left = NULL;
        $$->right = ;
        Traversal($$);
        }
;

这是外部函数的代码:

void Traversal(struct Node *root) {
    if(root->left == NULL && root->right == NULL)
        printf("AST is empty.");
    else {
        switch (root->left->type) {        
        case NODE_TYPE_STMT_D:
            TravDeclaration(root->left->value_s.declaration);
            break;
        /* other cases */
        default:
            printf("Error, check node_type.");
            break;
        }
        if(root->right->type != NODE_TYPE_END)
            Traversal(root->right);
    }
}

我认为调用外部函数时指针的使用可能有错误。如果我在问题中遗漏了什么,请告诉我,这是我第一次来这里。

switch (root->left->type)

如果 root->leftNULL(在这种情况下是因为您设置了 $$->left = NULL;)而 root->right 不是,上面的行将取消引用 NULL指针。

同样,在 root->rightNULLroot->left 不是的情况下,您以后使用 root->right->type 会取消引用 NULL