Проблема использования пустого указателя в качестве аргумента функции
Я не могу понять этот результат...
Код:
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)
(дополнительные скобки, чтобы уточнить приоритет).