Non è proprio un codice facile da interpretare..

Prova a mettere:

codice:
int *dati[NUM_DATI];
int i; 
for(i=0;i<NUM_DATI;i++) my_alloc(dati[i],num);
printf ("\nAllocazione avvenuta.");
 fill_vec(dati,num,inptr); 
printf ("\nMatrice riempita.");
Così almeno vedi dove va in segmentation!