Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con asignacion dinamica de memoria

Estas en el tema de Problemas con asignacion dinamica de memoria en el foro de C/C++ en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 05/03/2008, 19:40
 
Fecha de Ingreso: noviembre-2004
Mensajes: 2
Antigüedad: 19 años, 6 meses
Puntos: 0
Problemas con asignacion dinamica de memoria

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");
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:25.