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

Memoria dinámica problema con free()

Estas en el tema de Memoria dinámica problema con free() en el foro de C/C++ en Foros del Web. Hola Tengo un problema usando free() para tratar de liberar la memoria que asigné a un puntero. Me aparece el siguiente error: "Debug Assertion Failed ...
  #1 (permalink)  
Antiguo 14/10/2008, 15:24
 
Fecha de Ingreso: octubre-2008
Mensajes: 1
Antigüedad: 15 años, 6 meses
Puntos: 0
Memoria dinámica problema con free()

Hola
Tengo un problema usando free() para tratar de liberar la memoria que asigné a un puntero.
Me aparece el siguiente error:
"Debug Assertion Failed Program: C:\fiscom\sim\liquido\Debug\vliquid.exe
File: dbgheap
Line 1044
Expression: _CrtIsValidHeapPointer(pUserData)"

Estoy trabajando con Visual C++ 2008 Express Edition en Windows XP.
El programa provoca una interrupción al llegar a la línea:
free(pos);

La verda es que nunca me había dado problemas la función free(), y no tengo ni idea de que puede estar pasando.

La memoria la asigno con la función:
double *asigMemodbl(int n)
{
/*Declaración de variables*/
double *matriz;

/*Se asigna memoria a la matriz*/
matriz = (double *) calloc(n,sizeof(double *));
if( matriz == NULL )
{
printf( "Insufficient memory available\n" );
}
return matriz;
}

Mi main() es el siguiente:
void main ()
{
int npart;
double *pos;
double *vel;
double *force;
double *forceaux;
double vcm[3];
double tfinal;
double box;
double Ecin;
double Epot;
double Temp;
double Pres;
double rcut;
double ecut;
double t;
double dt;
double a;
int i,nsize;

//Se leen los parámetros de la simulación
leerParam(&dt,&Temp,&tfinal,&box,&npart,&rcut,&a);

//Se asigna memoria a los vectores
nsize=npart*3;
pos=asigMemodbl(nsize);
forceaux=asigMemodbl(nsize);
force=asigMemodbl(nsize);
vel=asigMemodbl(nsize);

//Inicializo la simulación
inicializa(box,npart,rcut,&ecut,&t,Temp,
vcm,&Ecin,&Epot,pos,
vel,forceaux,force);

for(i=1;(i*dt<tfinal);i++)
{
evol(&t,dt,npart,pos,vel,force,&Epot,
ecut,rcut,&Ecin,forceaux,box);
printf("t=%f\n",t);
}
printf("\n\nYa está");
getch();

free(pos);
free(forceaux);
free(force);
free(vel);
}

Estaría muy agradecido si me pudiesen echar una mano.
Saludos,
M
  #2 (permalink)  
Antiguo 15/10/2008, 02:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Memoria dinámica problema con free()

El problema seguramente esta en las funciones que no pegaste aca, fijate que pasa cuando no las ejecutas y solo reservas y liberas la memoria.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 17:43.