considera i seguenti punti:

- un char* sono pochi byte che contengono un numero che rappresenta un indirizzo di memoria, tale indirizzo
dopo la tua malloc corrisponde al valore ritornato dalla malloc
- la memoria allocata con malloc puo' essere ovunque nello heap, e' il sistema operativo che decide dove allocarla
- sizeof(Str) ritorna la dimensione di un int + la dimensione di un char*, il che non include la dimensione della memoria puntata dal puntatore
- i e nome sono allocati contiguamente in memoria in quanto parte della stessa struct, ma la memoria puntata da nome puo' essere
da tutt'altra parte, come detto nel punto 2
- se vuoi inviare la stringa puntata da nome devi passare a write l'indirizzo della memoria allocata dinamicamente e la dimensione della stessa.