Quando hai un problema devi postare il codice esatto in cui si manifesta il problema e non un altro, altrimenti perdiamo tutti tempo. Quello che hai mostrato e' o non e' quello in cui si manifesta il problema?
E in ogni caso, k restituito alla fine non e' quello usato per assegnare i ma e' il prossimo. Dovrebbe quindi essere
return(k-1);