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