Problema al utilizar puntero nulo como un argumento de la función
-
25-09-2019 - |
Pregunta
No puedo entender este resultado ...
El 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));
}
Y hago esta llamada: bar(900011009);
Sin embargo, la salida printf()
es:
[-1074593956]
Realmente necesito key
sea un puntero nulo, ¿cómo puedo solucionar este problema?
Solución
creo que necesitas lo siguiente:
printf("[%d]\n", *(int*)key);
La clave es un puntero nulo a la int, por lo que primero tiene que fundido a un puntero int, a continuación, eliminar la referencia para obtener el original de la Int.
Otros consejos
Si lanzas el puntero a int
, que está recibiendo el Dirección como el valor. Es necesario eliminar la referencia punteros void como cualquier otro. Sólo se puede eliminar la referencia no directamente void *
, por lo que primero debe convertirlo a un puntero del tipo correcto, aquí int *
. A continuación, eliminar la referencia de ese puntero, es decir *((int *)key)
(paréntesis adicionales para aclarar la precedencia).