In realta' questa linea
for (indice=0;indice<num_dati;indice++)
e' sbagliata e dovrebbe essere
for (indice=0;indice<num_dati-1;indice++)
Questo errore puo' essere causa della corruzione dello stack e, in modo imprevedibile, il flusso del programma ne puo' risentire.