C 条件跳转或移动取决于单初始化值
我从valgrind得到以下错误。条件跳转或移动取决于非斜体值。我环顾了一下周围类似的问题,但我无法找出问题所在。我已经初始化了所有变量,但仍然C 条件跳转或移动取决于单初始化值,c,hash,valgrind,C,Hash,Valgrind,我从valgrind得到以下错误。条件跳转或移动取决于非斜体值。我环顾了一下周围类似的问题,但我无法找出问题所在。我已经初始化了所有变量,但仍然 unsigned long hash_word(const char *str) { unsigned long hash = 5381; int c = 0; while((c = *str)) // The error occurs here { hash = ((hash<<5) + hash) + c;
unsigned long hash_word(const char *str)
{
unsigned long hash = 5381;
int c = 0;
while((c = *str)) // The error occurs here
{
hash = ((hash<<5) + hash) + c;
str++;
}
return hash%1999099;
}
呼叫代码是
while(!(feof(fp)))
{
node *n = malloc(sizeof(node));
if (n == NULL)
{
return false;
}
else
{
fscanf(fp,"%s",n->word);
index = hash_word(n->word);
.
.
. // further code
}
这看起来像是对
feof()
功能的误解。在由于EOF导致读取失败之前,它不会返回真值。因此,在上一次迭代中,fscanf()
调用失败,因此不会初始化n->word
。您应该检查fscanf()
的返回值。如果点击EOF,则返回C值EOF
。您还可以检查值1
,该值指示单个字段已成功转换。这似乎是对feof()
功能的误解。在由于EOF导致读取失败之前,它不会返回真值。因此,在上一次迭代中,fscanf()
调用失败,因此不会初始化n->word
。您应该检查fscanf()
的返回值。如果点击EOF,则返回C值EOF
。您还可以检查值1
,该值指示单个字段已成功转换。如何获得str
?显示呼叫方代码。您如何获取str
?显示调用方代码。但如果feof失败,则节点*n将不会被malloc'd。然后if循环应该捕获它。feof()
直到读取失败后才会返回true。但是在代码读取失败和检查EOF之间,它会尝试使用它(没有)读取的值。但是如果feof失败,那么节点*n将不会被malloc'd。然后if循环应该捕获它。feof()
直到读取失败后才会返回true。但是在代码读取失败和检查EOF之间,它会尝试使用它(没有)读取的值。
while(!(feof(fp)))
{
node *n = malloc(sizeof(node));
if (n == NULL)
{
return false;
}
else
{
fscanf(fp,"%s",n->word);
index = hash_word(n->word);
.
.
. // further code
}