当两个不相关的 C 代码放在一起时出现分段错误



主函数有2个代码。我正在学习数组和指针。我更感兴趣的是,当两个部分放在一起时,为什么代码会抛出分段错误。当它们单独运行时,它们运行良好

#include <stdlib.h>
#include <stdio.h>
typedef struct nodeT{
    int data;
    struct nodeT *left;
    struct nodeT *right;
}node;
insert(node **root, int data){
    if(*root == NULL){
        node *elem;
        elem = (node*)malloc(sizeof(node));
        elem->data = data;
        elem->left = NULL;
        elem->right = NULL;
        *root = elem;
    }
    else{
        if((*root)->data > data){
            insert(&((*root)->left),data);
        }
        else{
            insert(&((*root)->right),data);
        }
    }
}
inorder(node *root){
    if(root == NULL){
        return;
    }
    else{
        inorder(root->left);
        printf("%d n", root->data);
        inorder(root->right);
    }
}
update(int A[]){
    A[3] = 1000;    
}
main(){
//PART 1
    node *root;
    insert(&root,5);
    insert(&root,6);
    insert(&root,8);
    insert(&root,1);
    insert(&root,9);
    inorder(root);
// PART 2
    int A[10];
    int  i  = 0;
    for(i = 0 ; i < 10 ; i++){
        A[i] = i;
    }
    for(i = 0 ; i < 10 ; i++){
        printf("%d n", A[i]);
    }
    printf("n");
    update(A);
    for(i = 0 ; i < 10 ; i++){
        printf("%d n", A[i]);
    }
    printf("n");
}

因为根是未初始化的,所以它应该是空的(可能)。所以你得到了不确定的行为。

main 也应该返回一个值(只是因为 c 允许你省略 'int' 才能编译)。您的代码将告诉客户端它已退出并出现不可预测的错误。

我认为你这里有一个问题

insert(node **root, int data){
    if(*root == NULL){

insert函数中。这与以下内容相结合

node *root;
insert(&root,5);

是一个问题,因为您没有在main()内显式将root设置为 NULL,因此理论上它的地址可以是任意值。

只要root不为空,您就会访问您无权访问的值,例如此处

(*root)->data > data

这可能会在main()开始时未明确设置为 NULL 的root段错误。

至于说代码的每个部分在单独运行时都运行"正常",那么我会说这一定只是运气好,因为代码的第 1 部分有一个明显的问题。

相关内容

  • 没有找到相关文章

最新更新