Проблема использования пустого указателя в качестве аргумента функции

Я не могу понять этот результат...

Код:

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 чтобы быть пустым указателем, как я могу это исправить?

2 ответа

Решение

Я думаю, что вам нужно это:

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

Ключ является пустым указателем на int, поэтому сначала нужно привести к int, а затем разыменовать, чтобы получить исходный int.

Если вы приведете указатель к int, вы получаете адрес в качестве значения. Вам нужно разыменовать пустые указатели, как и любые другие. Только вы не можете напрямую разыменовать void *, поэтому вы должны сначала привести его к указателю правильного типа, здесь int *, Затем разыменуйте этот указатель, т.е. *((int *)key) (дополнительные скобки, чтобы уточнить приоритет).

Другие вопросы по тегам