No olvidar validar el puntero devuelto por realloc, éste podria ser un valor nulo asi que se sobreescribiria la variable con el puntero valido a la memoria dinamica como resultado dando una fuga de memoria. Además porqué no simplemente usar memcpy o strcpy para copiar las cadenas de entrada en lugar de usar un for y tener multiples variables. algunos compiladores puede que no optimizen esas partes.
Veo que estás implementado una especie de std::string, puede que estes interesado en hecharlo un vistazo a las librerias del compilador (VC++):
%ProgramFiles%\Microsoft Visual Studio <Version>\VC\crt\src
O unas más "claras" y simples:
http://www.keithschwarz.com/interesting/-> code/string/String.cpp.html
-
Acerca del problema usando el compilador, no es especifico del compilador y más bien deberias de estar feliz que VC++ agrega comprobadores para detectar que se está escribiendo en memoria no reservada y corrompiendo memoria del heap.