Cosa non va:

1) La funzione malloc restituisce un puntatore ad oggetto generico (void *) che deve adattato con un casting, come suggerisce Fabiuz, in questo modo

codice:
    mia_struct * dato = (mia_struct *) malloc (sizeof mia_struct);
2) Tu assegni con quella malloc lo spazio necessario per due interi: per prima cosa, non è detto che la dimensione di una struttura sia la somma delle dimensioni dei elementi, inoltre, nella struttura hai dichiarato un puntatore ad intero ed un intero, per cui lo spazio assegnato non coinciderà sicuramente.

Saluti