Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


error al reservar y liberar memoria

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

error al reservar y liberar memoria

Notapor rbpkirow el Jue Feb 02, 2006 5:52 am

Hola a tod@s.

Tengo un problema con los comandos malloc y free, tengo el siguiente codigo:

double *error;
error=(double*)malloc(archivo*sizeof(double));
................................
if( condicion)
{
while( condicion)
{
..................
}
}
free(error);


Me da un fallo al liberar la memoria,
alguien sabria decirme por qué
Gracias a todos.
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 73
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: error al reservar y liberar memoria

Notapor latindeveloper el Jue Feb 02, 2006 8:13 am

El codigo que mostraste corre perfectamente en mi equipo, el problema tiene que ver con la utilizacion de ese puntero, asegurate lo estes utilizando dentro del rango.

Otra opcion es que utilices esta forma:



Código: Seleccionar todo
int archivo = 3000;

double *error = new double[archivo];

....

delete [] error;
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru

no me funciona

Notapor rbpkirow el Jue Feb 02, 2006 10:03 am

Hola de nuevo.
He probado el codigo que me has pasado, y tampoco me funciona.

Puede ser que no este dentro del rango que me has comentado?
¿Como puedo saber si esta o no dentro de él?
y si no está, como puedo solucionarlo?

Gracias por todo.
1saludo
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 73
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: no me funciona

Notapor latindeveloper el Jue Feb 02, 2006 2:31 pm

- Asegurarte que archivo sea mayor que cero.

Código: Seleccionar todo
if(archivo > 0 )
{
  ...
}


- Asegurarte cuando accedas a un indice del array, este dentro del rango.


Código: Seleccionar todo
if(archivo > 0 )
{
   double *error = new double[archivo];

   if(i >= 0 && i < archivo )
   {
      //acceder a cada elemento: error[i]
   }
   else
   {
      //Horror!
   }
   delete [] error;
}else
{
   //Horror!
}
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru


Volver a Visual C++

¿Quién está conectado?

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

cron