Domanda

Non riesco a capire questo risultato ...

Il codice:

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 faccio questo appello: bar(900011009);

Ma l'uscita printf() è:

[-1074593956]

ho davvero bisogno key ad essere un puntatore nullo, come posso risolvere il problema?

È stato utile?

Soluzione

Credo che avete bisogno di questo:

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

La chiave è un puntatore nullo per l'int, quindi è necessario prima di cast un puntatore a int, quindi dereference per ottenere l'int originale.

Altri suggerimenti

Se lanci il puntatore int, si stanno ottenendo il Indirizzo come valore. È necessario risolvere il riferimento puntatori void come qualsiasi altro. Solo tu puoi non direttamente dereferenziare void *, quindi è necessario prima il cast a un puntatore del tipo corretto, qui int *. Poi dereference tale puntatore, cioè *((int *)key) (parentesi in più per chiarire la precedenza).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top