Pergunta

Não consigo entender esse resultado ...

O código:

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));
}

E eu faço isso: bar(900011009);

Mas o printf() A saída é:

[-1074593956]

Eu realmente preciso key Para ser um ponteiro vazio, como posso consertar isso?

Foi útil?

Solução

Eu acho que você precisa disso:

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

A chave é um ponteiro vazio para o INT, então você precisa primeiro lançar para um ponteiro int e depois desreferência para obter o Int original.

Outras dicas

Se você lançar o ponteiro para int, você está recebendo o Morada como o valor. Você precisa desreferenciar indicações vazias como qualquer outra. Só você não pode desreferenciar diretamente void *, então você deve primeiro lançá -lo para um ponteiro do tipo correto, aqui int *. Então desreference aquele ponteiro, ou seja *((int *)key) (Parênteses extras para esclarecer a precedência).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top