我正试图通过地址传递内容。在这种情况下是一个char数组,但它可以是任何东西。
void rickyHashTableAdd(rickyHashTable *table, char *key, void *value)
{
rickyHashTableEntry entry;
entry.key = strdup(key);
entry.value = value;
table->entries[0] = entry;
}
int rickyHashTableGet(rickyHashTable *table, char *key, void *value)
{
value = table->entries[0].value;
}
int main (void)
{
void *val;
val = "what up";
rickyHashTableAdd(&symbolTable, "ok", val);
void *val2;
rickyHashTableGet(&symbolTable, "ok", val2);
printf("result: %s\n", val2);
}
当我在rickyHashTableGet函数中检查'value'的值时它是正确的,但是当我在调用函数后检入main时它是坏的。它似乎没有设置到正确的内存地址。这是为什么?
答案 0 :(得分:2)
int rickyHashTableGet(rickyHashTable *table, char *key, void *value)
{
value = table->entries[0].value;
}
这会忽略传递的value
。将value
设置为某个东西,然后将其抛弃。这可能不对。
void *val2;
rickyHashTableGet(&symbolTable, "ok", val2);
这不会将val2
设置为任何内容,因此会将无意义的值传递给rickyHashTableGet
。这不可能是正确的。
你想:
int rickyHashTableGet(rickyHashTable *table, char *key, void **value)
{
*value = table->entries[0].value;
}
它指向一个void *
,并指向某个东西。
和
void *val2;
rickyHashTableGet(&symbolTable, "ok", &val2);
将val2
的地址传递给rickyHashTableGet
,以便设置其值。
答案 1 :(得分:0)
在你的get例程中,它应该是void ** get作为参数和* value = table-> entries [0] .value;然后,呼叫将使用& val2。