Hola,
con el código en C que pongo a continuación intento conseguir que se lea un vector del que previamente no se sabe el tamaño, y una vez leido lo imprima en pantalla. Uso malloc y realloc para ir asignando memoria conforme se van añadiendo elementos al vector. El problema es que si el vector es de uno o dos elementos me los imprime bien, pero si tiene tres o más elementos, curiosamente solo imprime bien el segundo elemento (indice 1) , el primero lo imprime a cero y el resto va dando valores extrños (siempre los mismos), ¿Por qué ocurre esto? Muchas gracias. Saludos.
El código es el siguiente:
#include <stdio.h>
void leer_vector(int *vect, int *n); //Carga un vector de tamaño indeterminado
void imprime_vector(int *vect, int n); //Imprime un vector de tamaño n
int main()
{
int norigen; //Número de elementos del vector origen
int *vectororigen;
vectororigen = NULL;
int tamano = 1*sizeof(int);
vectororigen = (int *) malloc( tamano );
leer_vector(vectororigen, &norigen);
imprime_vector(vectororigen, norigen);
return 0;
}
void leer_vector(int *vect, int *n)
{
int i=0;
char respuesta;
int nuevo_tamano=0;
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');
}
void imprime_vector(int *vect, int n)
{
int i;
for(i=0; i<n; i++)
printf("\t%d", vect[i] );
printf("\n");
}