Problema utilizzando puntatore nullo come argomento di funzione
-
25-09-2019 - |
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?
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).