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.