将数据存储在地址中并在C中更改变量的地址?

时间:2012-02-06 06:26:35

标签: c memory-address

新手在这里,

我有一个单词的结构,其中包含单词本身的char数组(结构有其他函数,与我的问题无关),我试图将它存储在一个hashmap中,这是一个数组单词struct指针。在我的程序中,每次看到一个新单词时,我都会创建一个新单词struct和malloc char-array来创建它。但是,经过几次循环之后,它会将旧单词更改为新单词,即使它位于不同的hashmap位置。

我想知道的是,是否可以将我创建新单词struct的循环指向新地址?

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;

这是有问题的代码。

我的问题的一个例子: 循环的第一个runthrough,我将add.word设置为apple,它存储在特定的hashmap槽中。 循环的下一个粗略,我将add.word设置为orange,它存储在不同的插槽中。问题是,在第一个插槽,它不再存储苹果,而是存储橙色,所以我有2个存储橙色的插槽,这不是我想要的。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案(我认为)就是将功能添加到一个单独的函数中的hashmap中。此函数分配一个新的words结构并将其放入hashmap:

void add_to_hashmap(struct something *hashmap, char *lower_case_word)
{
    /* Using "calloc" we don't have to manually clear the structure */
    struct words *words = calloc(1, sizeof(struct words));

    /* Copy +1 to include the terminating '\0' */
    memcpy(words->word, lower_case_word, strlen(lower_case_word) + 1);

    /* Replace this with whatever you use to calculate the hash */
    int hashf = calculate_hash(lower_case_word);

    hashmap[hashf] = words;
}

如果您删除某个条目(即将其设置为NULL),则必须先记得将其释放。