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?

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top