problema con memoria dinamica al usar estructura

Dudas sobre el C/C++ en general
Responder
Mensaje
Autor
garoto
Mensajes: 2
Registrado: 26/12/2012 9:45 am

problema con memoria dinamica al usar estructura

#1 Mensaje por garoto » 14/01/2013 4:31 pm

Hola espero me puedan ayudar con el siguiente problema

estoy iniciando con las estructuras y reserva dinamica de memoria.. Mi intencion es poder reservar dinamicamente memoria en tiempo de ejecucion para redimensionar un vector de tamaño x a tamaño x+n en donde n sea un numero introducido por el usuario o sea el numero de las lineas obtenidas por una funcion de un archivo binario a leer, tal reasignacion la requiero para generar por ejemplo 10000000 variables aleatorias ese numero de iteraciones pienso meterlo en un bucle for pero al iniciar a hacer algunas pruevas me sucede lo siguiente.. en el siguiente codigo al introducir 100000000 con las lineas comentadas en las operaciones con el vector el bucle for termina sin problema alguno


//vect[i].cor_x=i+0.1;
//vect[i].cor_y=i+0.2;
//vect[i].cor_z=i+0.3;



pero si intento hacer las operaciones en en el vector solo puede hacer 2 iteraciones y en la tercera se cae.. en verdad creo que el problema es con la asignacion de memoria pero no se que tipo de estructura me permitiria en c hacer lo que requiero hacer o como administrar la memoria o usar quisas subtareas etc.. en verdad desconozco mucho y almenos espero puedan orientarme para continuar..

[code]#include <stdio.h>
#include <stdlib.h>

typedef struct{
float cor_x;
float cor_y;
float cor_z;
}vectorxyz;


int Elementos;
vectorxyz *vect;

void reservamem(void);
int main ()
{

reservamem();


return 0;
}

void reservamem(void)
{

int i;
printf (" Cuantos elementos quieres? ");
scanf ("%d", &Elementos);

vect = (float*)malloc(Elementos*sizeof(float));
if (vect==NULL)
{
perror("Problemas reservando memoria");
exit (1);
}

// trabajamos con el vector

for (i=0; i<Elementos; i++)
{
vect[i].cor_x=i+0.1;
vect[i].cor_y=i+0.2;
vect[i].cor_z=i+0.3;

//printf("vector %d cordenada x %f\n", i, vect[i].cor_x);
//printf("vector %d cordenada y %f\n", i, vect[i].cor_y);
//printf("vector %d cordenada x %f\n", i, vect[i].cor_x);
//printf("Valores almacenados en el vector: %d\n", vect[i]);
}
printf("numero maximos es: %d", i);
// lo liberamos
free (vect);
}[/code]

Avatar de Usuario
leosan
Mensajes: 730
Registrado: 19/04/2012 8:35 am
Ubicación: GRAN CANARIA

Re: problema con memoria dinamica al usar estructura

#2 Mensaje por leosan » 15/01/2013 9:27 am

garoto escribió:Hola espero me puedan ayudar con el siguiente problema

estoy iniciando con las estructuras y reserva dinámica de memoria.. Mi intención es poder reservar dinámicamente memoria en tiempo......
Creo que en la reserva de memoria te quedas "corto", ya que tienes tres variables que necesitan igual cantidad de memoria, con lo que esta sería:

Código: Seleccionar todo

vect = (float*)malloc(3*Elementos*sizeof(float));
Por cierto, use para verlo en un tiempo corto:

Código: Seleccionar todo

for (i=0; i<Elementos; i+=10000)
Al menos así a mí me funciona.
Saluditos!.

garoto
Mensajes: 2
Registrado: 26/12/2012 9:45 am

problema con memoria dinamica al usar estructura

#3 Mensaje por garoto » 15/01/2013 12:06 pm

Gracias leosan

creo que debi de haber declarado

vect = (vectorxyz*)malloc(Elementos*sizeof(vectorxyz));

o crees que lo correcto es:

vect = (vectorxyz*)malloc(Elementos*sizeof(vectorxyz));

saludos

Avatar de Usuario
Sorancio
Mensajes: 1157
Registrado: 29/05/2009 12:42 pm
Ubicación: España
Contactar:

#4 Mensaje por Sorancio » 15/01/2013 2:55 pm

Tienes que usar el tamaño de la estructura, como bien has dicho en tu último comentario.

vect = (vectorxyz*)malloc(Elementos*sizeof(vectorxyz));

El casteo no es necesario, por lo que podría quedar así:

vect = malloc(Elementos*sizeof(vectorxyz));

Que el código es bastante más limpio.
Mi página web (en inglés): http://kmr.conscell.net/

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados