Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C trie中未初始化的值_C_Initialization_Valgrind_Trie - Fatal编程技术网

C trie中未初始化的值

C trie中未初始化的值,c,initialization,valgrind,trie,C,Initialization,Valgrind,Trie,我刚刚在c中实现了一个trie,在我的程序上运行了valgrind,虽然所有堆都被释放了,但它显示了一些未初始化的值。这是Valgrind的输出 这是trie代码(在trie的typedef中,数组有26个元素表示英文字母,1个元素表示撇号,1个元素不为null时表示单词的结尾): #包括 #包括 #包括 #包括 typedef结构trie { 结构trie*数组[28]; }特里亚; void add(char*word,trie*start) { trie*电流=启动; trie*previ

我刚刚在c中实现了一个trie,在我的程序上运行了valgrind,虽然所有堆都被释放了,但它显示了一些未初始化的值。这是Valgrind的输出

这是trie代码(在trie的typedef中,数组有26个元素表示英文字母,1个元素表示撇号,1个元素不为null时表示单词的结尾):

#包括
#包括
#包括
#包括
typedef结构trie
{
结构trie*数组[28];
}特里亚;
void add(char*word,trie*start)
{
trie*电流=启动;
trie*previous=NULL;
int i=0;
while(当前!=NULL&&i数组[字[i]-“a'];
i++;
}
我--;
for(;iarray[word[i]-'a']=malloc(sizeof(trie));
previous=previous->array[word[i]-“a'];
}
previous->array[27]=malloc(sizeof(trie));
}
布尔搜索(char*word,trie*start)
{
trie*电流=启动;
for(int i=0;i数组[*(word+i)-“a”];
如果(当前==NULL)
{
返回false;
}
}
如果(当前->数组[27]!=NULL)
{
返回true;
}
返回false;
}
无效清除(trie*开始)
{
如果(开始!=NULL)
{
对于(int i=0;i<28;i++)
{
清除(开始->数组[i]);
}
自由(启动);
}
}
内部主(空)
{
trie*start=malloc(sizeof(trie));
char*word=“ba\0”;
添加(单词,开始);
清除(启动);
}

当您创建
start
节点时,您将
数组
成员保持为未初始化状态,但稍后在
添加
函数中对其进行操作。这是第一次在这一行

current = current->array[word[i] - 'a'];  
我认为以下应该解决这个问题:

trie* start = malloc(sizeof(trie));
for(int i = 0; i < 28; ++i)
{
   start->array[i]=NULL;
}
trie*start=malloc(sizeof(trie));
对于(int i=0;i<28;++i)
{
开始->数组[i]=NULL;
}

当您创建
start
节点时,您将
数组
成员保持为未初始化状态,但稍后在
添加
函数中对其进行操作。这是第一次在这一行

current = current->array[word[i] - 'a'];  
我认为以下应该解决这个问题:

trie* start = malloc(sizeof(trie));
for(int i = 0; i < 28; ++i)
{
   start->array[i]=NULL;
}
trie*start=malloc(sizeof(trie));
对于(int i=0;i<28;++i)
{
开始->数组[i]=NULL;
}

或直接使用calloc()而不是malloc@Claptrap不不不不使用calloc来初始化指针,不能保证空指针表示为所有位零,或者只使用calloc()而不是malloc@Claptrap不不不不使用calloc初始化指针,不能保证空指针表示为所有零位