C &引用;。exe文件已停止工作“;跑步时

C &引用;。exe文件已停止工作“;跑步时,c,C,下面的程序编译得很好,但运行时出现错误“.exe文件ahs stopped working”。请帮忙。有什么建议吗 #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 500 struct key { int item; struct key *left; struct key *right; }; typedef st

下面的程序编译得很好,但运行时出现错误“.exe文件ahs stopped working”。请帮忙。有什么建议吗

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

#define MAXSIZE 500 

struct key 
{ 
    int item; 
    struct key *left; 
    struct key *right; 
}; 

typedef struct key star;  

void make_tree(star *link, int j, char a[]); 
int find_num_of_leaves(star *node); 

star *tree; 
char input[MAXSIZE]; 

int main() 
{ 
    int i=0; 
    int num; 

    printf("Enter the number:\n"); 
    scanf("%[^\n]", input); 

    tree = (star *) malloc(sizeof(star)); 
    tree->item = -1; 

    make_tree(tree, i, input); 
    printf("@@@@@@@"); 
    num = find_num_of_leaves(tree); 
    printf("#######"); 
    printf("\n\n%d", num); 

    return(0); 

} 

void make_tree(star *link, int j, char a[]) 
{ 
    if(a[j] == '\0') 
    { 
        link->left = NULL; 
        link->right = NULL; 
        return; 
    } 

    if(a[j+1] == '\0') 
    { 
        link->right = NULL; 
        return; 
    } 

    if(int(a[j]) > 0) 
    { 
        link->left = (star *) malloc(sizeof(star)); 
        (link->left)->item = a[j]; 
        return make_tree(link->left, j+1, a); 
    } 

    if(((10*int(a[j])) + int(a[j+1])) <= 26) 
    { 
        link->right = (star *) malloc(sizeof(star)); 
        (link->right)->item = (10*int(a[j])) + int(a[j+1]); 
        return make_tree(link->right, j+1, a); 
    } 

} 

int find_num_of_leaves(star *node) 
{ 
    if(node == NULL) 
        return 0;     
    if(node->left == NULL && node->right == NULL) 
        return 1; 
    else 
        return find_num_of_leaves(node->left) + find_num_of_leaves(node->right); 
    /*if(node->left == NULL) 
        find_num_of_leaves(node->right); 

    if(node->right == NULL) 
        find_num_of_leaves(node->left); 

    if(node->right != NULL && node->left != NULL) 
    { 
        find_num_of_leaves(node->left); 
        find_num_of_leaves(node->right); 
    }*/ 

} 
#包括
#包括
#包括
#定义最大尺寸500
结构键
{ 
国际项目;
结构键*左;
结构键*右;
}; 
typedef结构键星;
void make_树(星形*链接,int j,char a[]);
int find_num_of_leaves(星形*节点);
星*树;
字符输入[MAXSIZE];
int main()
{ 
int i=0;
int-num;
printf(“输入编号:\n”);
scanf(“%[^\n]”,输入);
树=(星形*)malloc(sizeof(星形));
树->项目=-1;
生成_树(树,i,输入);
printf(“@@@@@”);
num=查找树叶(树)的数量;
printf(“##########”);
printf(“\n\n%d”,num);
返回(0);
} 
void make_树(星形*链接,整数j,字符a[])
{ 
如果(a[j]='\0')
{ 
链接->左=空;
链接->右=空;
返回;
} 
如果(a[j+1]='\0')
{ 
链接->右=空;
返回;
} 
如果(int(a[j])>0
{ 
链接->左=(星形*)malloc(sizeof(星形));
(链接->左)->项目=a[j];
返回make_树(link->left,j+1,a);
} 
如果((10*int(a[j])+int(a[j+1])right=(star*)malloc(sizeof(star));
(链接->右)->item=(10*int(a[j])+int(a[j+1]);
返回make_树(link->right,j+1,a);
} 
} 
int find_num_of_leaves(星形*节点)
{ 
if(node==NULL)
返回0;
if(node->left==NULL&&node->right==NULL)
返回1;
其他的
返回find_num_of_leaves(节点->左)+find_num_of_leaves(节点->右);
/*如果(节点->左==NULL)
查找叶子的数目(节点->右侧);
如果(节点->右侧==NULL)
查找叶子的数目(节点->左);
如果(节点->右!=NULL&&node->左!=NULL)
{ 
查找叶子的数目(节点->左);
查找叶子的数目(节点->右侧);
}*/ 
} 

执行“生成树”操作时,如果代码通过此位,则不会初始化“左链接”: (例如,如果在控制台中输入一位数字)


因此,当您的代码调用
find_num_of u leaves
并依次调用
find_num_of u leaves
时,它在尝试取消引用节点的左侧部分时崩溃。

您试过调试它吗?在它停止工作之前可以输入多少项?甚至不到1项……它请求输入。然后打印,然后停止运行它来自您自己的程序……这与一般的“甚至不是1”有些矛盾,如果您正在测试空指针(正如您在find_num_of_leaves中所做的),您需要确保这些指针初始化为空
if(a[j+1] == '\0')
{
      link->right = NULL;
      return;
}