A mi no me sucede eso que tu dices. Lo corri con veces igual a 10 y funcion estupendo. El unico problema que le encontre es que a max_long dedes sumarle uno, para almacenar el caracter de fin de linea (a lo mejor eso te esta mantando). Yo me di cuanta porque siempre inprime caracteres basura al final de todo.
Código C:
Ver originalint max_long = long_string(dat1) + long_string(dat2) + 1 ;
Otras cosas para recalcar, asi vas aprendiendo, esta linea en principio seria innecesaria porque la cadena ya viene creada desde un new.
Directamente podrias gardarla en una variable tipo Char *.
Todo lo demas esta muy bien! Saldos