Buena pregunta Lucifer, aparentemente todo funciona como se espera, aunque muy en el fondo este caso es algo particular, cada vez que se invoca realloc estamos reasignando nuestro bloque de memoria, este nuevo bloque puede o no coincidir con la posición del bloque que teniamos previamente reservado, esto en realidad como tal no lo controlamos. Ahora, lo que esta sucediendo aquí es que el bloque de memoria que estamos reasignado sigue conservando la misma posición inicial en memoria que el bloque de origen y esto ha permitido que el puntero "vectororigen" siga apuntando al mismo, lo cual no significa que este bien.
Un simple cambio en el código puede dejar ver el error, ya que realloc reubicará el bloque en memoria:
Código:
void leer_vector(int *vect, int *n)
{
int i=0;
char respuesta;
int nuevo_tamano=0;
int *ptr = malloc(sizeof *ptr);
do
{
fflush(stdin);
printf("\n¿Elemento %d del vector origen?", i+1);
scanf("%d", &vect[i]);
fflush(stdin);
printf("\n¿Otro elemento?(S/N)");
scanf("%c", &respuesta);
if (respuesta=='s' || respuesta=='S')
{
nuevo_tamano = sizeof(int)*(i+2);
vect = (int *) realloc (vect, nuevo_tamano );
i++;
}
*n = i+1;
}while(respuesta=='s' || respuesta=='S');
}
Otra cosa Carlos2005 cada vez que utilices malloc o realloc incluye stdlib.h.
Un Saludo.