C &引用;。exe文件已停止工作“;跑步时
下面的程序编译得很好,但运行时出现错误“.exe文件ahs stopped working”。请帮忙。有什么建议吗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
#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;
}