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

StackOverflow https://stackoverflow.com/questions/2589214

Вопрос

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

Код:

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