有条件跳转问题

问题描述:

我正在用valgrind测试trie,并且在第一个符号传递给函数create_trienode后发生“条件跳转或移动取决于未初始化值(s)”错误。有条件跳转问题

我有结构:

typedef struct TrieNode{ 
    struct TrieNode **children; 
    bool is_word; 
} TrieNode; 

FUNC create_trienode:上线if(ptr->children[converted] == NULL)的valgrind

struct TrieNode *create_trienode(char c, struct TrieNode *parent){ 
    struct TrieNode *node = malloc(sizeof(struct TrieNode)); 
    node->children = malloc(ALPHABET_SIZE*sizeof(struct TrieNode*)); 
    node->is_word=false; 
    return node; 
} 

和FUNC create_tree

struct TrieNode *create_tree(FILE *file) 
{ 
struct TrieNode *root = create_trienode(' ', NULL); 
struct TrieNode *ptr = root; 
int character; 
int converted; 
int buffer; 

//This handles if file does not end with a newline 
character = fgetc(file); 
buffer = fgetc(file); 

while(character != EOF) 
{ 
    character = tolower(character); 

    if (character == 10) // case newline 
    { 

    } 
    else 
    if(isalpha(character)) 
    { 

     converted = character - 'a'; 
     if(ptr->children[converted] == NULL) // CONDITIONAL JUMP HERE 
     { 
      ptr->children[converted] = create_trienode(character, ptr); 
     } 

     ptr = ptr->children[converted]; 

    } 

    if (character == 92) 
    { 
     if(ptr->children[ALPHABET_SIZE] == NULL) 
     { 
      ptr->children[ALPHABET_SIZE] = create_trienode(character, ptr); 
     } 
     ptr = ptr->children[ALPHABET_SIZE]; 
    } 

    if(ptr != root && (!(character == 92|| isalpha(character)) || buffer == EOF)) 


    { 
     ptr->is_word = true; 
     ptr = root; 
     word_count++; 
    } 

    character = buffer; 
    buffer = fgetc(file); 
} 

说:“条件跳转或移动依赖于未初始化值(s)“我如何解决这个问题?

+0

首先,初始化应该是'node-> children = malloc(ALPHABET_SIZE * sizeof(struct TrieNode *));'(注意额外的'*'...) –

+0

另外,我不相信这个是你的真实代码。你已经定义了'create_trienode'来接受一个参数,但是当你调用它时你传递了两个参数。 –

+0

这是一个错误create_trienode应该传递两个参数。 Thx用于*注,减去丢失字节的一半 – Tom

您将ptr->children[converted]NULL进行比较,但未将其初始化为任何值。

malloc之后,空间不是NULL,所以ptr->children[converted]不能为'NULL',它可以是任何值。

要修复它,您可以在您的malloc后初始化ptr->children[converted]为NULL。

+0

又名'calloc' ... –

+0

谢谢。问题解决了 – Tom