C 条件跳跃问题

C 条件跳跃问题,c,valgrind,trie,C,Valgrind,Trie,我正在用valgrind测试trie,在第一个符号传递到函数create_triode后出现“条件跳转或移动取决于未初始化的值”错误 我有一个结构: typedef struct TrieNode{ struct TrieNode **children; bool is_word; } TrieNode; func创建三节点: struct TrieNode *create_trienode(char c, struct TrieNode *parent){ struc

我正在用valgrind测试trie,在第一个符号传递到函数create_triode后出现“条件跳转或移动取决于未初始化的值”错误

我有一个结构:

typedef struct TrieNode{
    struct TrieNode **children;
    bool is_word;
} TrieNode;
func创建三节点:

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创建树

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);
}

if(ptr->children[converted]==NULL)
valgrind说“条件跳转或移动取决于未初始化的值”,我如何解决这个问题

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

malloc之后,空格不为NULL,因此
ptr->children[converted]
不能为“NULL”,它可以是任何值


要修复它,可以在malloc之后将
ptr->children[转换]
初始化为NULL。

首先,初始化应该是
node->children=malloc(ALPHABET_SIZE*sizeof(struct triode*)(注意额外的
*
..)另外,我不相信这是你真正的代码。您定义了
create\u triode
接受一个参数,但调用它时传递了两个参数。create\u triode应该传递两个参数是错误的。注意,减去丢失字节数的一半总是在使用malloc返回的值之前检查(!=NULL)