主要功能有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");
}
答案 0 :(得分:0)
因为root是未初始化的,所以它应该为null(可能)。所以你得到了不确定的行为。
main也应该返回一个值(只是因为c允许你省略'int'来编译)。您的代码将告诉客户端退出时出现无法预料的错误。
答案 1 :(得分:0)
我认为你有问题
insert(node **root, int data){
if(*root == NULL){
在insert
功能中。这结合以下
node *root;
insert(&root,5);
是一个问题,因为您没有在root
内明确地将main()
设置为NULL,因此理论上它的地址可以是任意值。
每当root
不为NULL时,您正在访问您没有业务访问权限的值,例如此处
(*root)->data > data
这可能会在root
开始时main()
未明确设置为NULL的段错误。
至于说代码的每个部分在单独运行时运行“正常”,那么我会说这一定是好运,因为代码的第1部分有明显的问题。