【发布时间】:2012-02-06 06:26:35
【问题描述】:
新手,
我有一个单词的结构,其中包含单词本身的 char 数组(该结构有其他函数,与我的问题无关),我试图将它存储在一个哈希图中,这是一个数组字结构指针。在我的程序中,每次我看到一个新单词时,我都会创建一个新单词结构并 malloc char-array 来创建它。然而,在循环运行几次之后,它会将旧词更改为新词,即使它位于不同的哈希图位置。
我想知道是否有可能让我创建新单词结构的循环指向一个新地址?
struct words add;
int b;
for(b = 0; b < strlen(LowerCaseCopy); b++)
{
add.word[b] = '\0';
}
for(b=0;b< strlen(LowerCaseCopy);b++)
{
add.word[b] = LowerCaseCopy[b];
}
hashmap[hashf] = &add;
这是有问题的代码。
我的问题的一个例子: 循环的第一次运行,我将 add.word 设置为 apple,它存储在特定的 hashmap 插槽中。 在循环的下一次运行中,我将 add.word 设置为橙色,它存储在不同的插槽中。问题是在第一个插槽,它不再存储苹果,而是存储橙色,所以我有 2 个存储橙色的插槽,这不是我想要的。我该如何解决这个问题?
【问题讨论】:
-
如何获取
hashf的值?它曾经改变过吗? -
当使用
b < strlen(LowerCaseCopy)时,您只是迭代到比字符串长度小一,因此不会复制完整的字符串。您也不要设置/复制字符串终止符。您的实际问题可能与您尝试为两个单词重用相同的变量有关,尝试使用不同的变量。 -
是的,hashf 正在发生变化,这只是我的代码的一部分,我将这部分放在一个循环中。如果我在循环的每次迭代中重用变量,那不会改变地址吗?
-
我的意思是你不能重用变量
add,因为它的地址不会改变。如果您将多个条目设置为&add,那么这些条目将指向一个结构。 -
有什么方法可以初始化它,以便每次外循环迭代时我可以有不同的地址?
标签: c memory-address