Pues es muy sencillo, dentro de la función inicializarCadenas, estás asignando al puntero cad nuevas direcciones de memoria, pero ese cambio de dirección no se ve fuera de la función.
Para que pudieses hacerlo así tendrías que pasarle un doble puntero:
Código C:
Ver originalvoid inicializarCadenas(char **cad)
{
char c;
int j=0;
*cad
= (char*)malloc(sizeof(char));
{
(*cad)[j] = c;
j++;
*cad
= (char*)realloc(*cad
, (j
+1) * sizeof(char)); }
(*cad)[j] = '\0';
}
int main()
{
char *cadena1, *cadena2;
int n,i;
inicializarCadenas(&cadena1);
return 0;
}