开发者

".exe file has stopped working" when run

开发者 https://www.devze.com 2023-02-14 16:52 出处:网络
The program below compiles fine, but gives the error \".exe file ahs stopped working\" when I run it.Please help.Any suggestions?

The program below compiles fine, but gives the error ".exe file ahs stopped working" when I run it. Please help. Any suggestions?

#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); 
    }*/ 

} 


When doing make tree your link->left does not get initialised if the code passes through this bit: (for instance, if you enter a single digit into the console)

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

Hence, when your code calls find_num_of_leaves which, in turn calls find_num_of_leaves, it crashes when it tries to dereference the left part of the node.

0

精彩评论

暂无评论...
验证码 换一张
取 消