所以我将一个字符串数组声明为
typedef char String[11];
,在我的main函数中我有这个条件
`
char word[12];
String hashArray[SIZE];
if (insertword(word, hashArray) == 1)
printf("word %s successfully inserted.\n", word);
这是它调用的函数。
int insertword(char word[], String hashArray[])
{
//get the hash
int hashIndex = hashfunction1(word)% 7 ;
printf("INDEX:%d\n", hashIndex); //delete later
if (hashArray[hashIndex] == NULL) //ERROR IS HERE
{
strcpy(hashArray[hashIndex], word);
printf("INSERTED!! ");
return 1;
}
else
{
printf("NOT INSERTED!! ");
return 0;
}
}
我通过添加打印来测试我的程序,显然错误发生在第一个条件语句中。 else部分始终是执行的部分。我在这里肯定遗漏了一些东西,任何帮助都会受到赞赏。
答案 0 :(得分:1)
您的代码存在问题:
char word[12];
String hashArray[SIZE];
word
未初始化,因此它具有垃圾值。
然后在insertword
函数内:
int hashIndex = hashfunction1(word)% 7;
数组“衰减”成指向第一个元素的指针:
hashfunction1(word)%7;
就像:
hashfunction1(word[0])%7;
再次,word
未初始化,因此值将被放入hashIndex
未知!
然后,您正在访问该索引中的数组hashArray[hashIndex]
,该数组未知,可能超出边界。
访问其边界之外的数组具有“未定义的行为”。
要解决此问题,您需要在word
数组中放置一些小于 32 的随机值,如评论size = 32
中所述。