我不理解这一结果...

代码:

void foo(void * key, size_t key_sz) {
    HashItem *item = malloc(sizeof(HashItem));

    printf("[%d]\n", (int)key);

    ...

    item->key = malloc(key_sz);
    memcpy(item->key, key, key_sz);
}

void bar(int num) {
    foo(&num, sizeof(int));
}

和我这样做呼叫:bar(900011009);

printf()输出是:

[-1074593956]

我真的需要key是一个空指针,我怎样才能解决这个问题?

有帮助吗?

解决方案

我想你需要这样的:

printf("[%d]\n", *(int*)key); 

关键是一个空指针为int,所以你首先需要转换为int指针,则取消引用来获得原始INT。

其他提示

如果你投的指针int,你得到的地址的作为值。您需要取消引用空指针像任何其他。只有你不能直接取消引用void *,所以你必须先将其转换为正确的类型,这里int *的指针。然后解引用该指针,即*((int *)key)(额外括号澄清优先)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top