elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate  (Leído 5,669 veces)
milya777

Desconectado Desconectado

Mensajes: 23



Ver Perfil WWW
Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« en: 22 Marzo 2011, 08:22 am »

Hola como andan? cree un programa que atiende clientes con su main correspondiente y con _begintheadex para atender a cada uno, pero el problema es que cuando voy al administrador de tareas veo mi proceso con una cantidad de memoria como 700kb, luego cuando un cliente se conecta aumenta como es logico, pero cuando se termina de atender al mismo la memoria no es eliminada, uso heapdestroy porq creo un heap de memoria antes con heapcreate. Para aclarar más el tema quiero decir que estoy trabajando en c++ con codigo en c, o sea no uso objetos, y lo hago con el visual studios en windows.para alocar memoria uso new.Espero que me puedan ayudar porq no puedo dejar al servidor solo porq pincha(segmentation fault) al aumentar la memoria a valores muy altosbueno gracias¡¡


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #1 en: 22 Marzo 2011, 09:06 am »

Si creas memoria con new, la borras con delete. Si lo haces con malloc, la liberas con free. NUNCA mezcles formas de llamar y liberar memoria, porque no sabes como están o no implementadas por debajo.


En línea

milya777

Desconectado Desconectado

Mensajes: 23



Ver Perfil WWW
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #2 en: 22 Marzo 2011, 23:15 pm »

claro te entiendo el tema que saque los delete porq a veces cuando los uso pincha mi servidor, los uso bien pero no entiendo porq pincha , entonces lo que hice es sacarlos,

otra cosa sobre heapdestroy, debería eliminar ese espacio de memoria que uso, leí que no hace falta usar delete o heapfree porq ya con heapdestroy elimina todo, aunque como puse más arriba en el administrador de tarea, en mi proceso sigue estando la memoria usada en ese thread

gracias por tu respuesta
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #3 en: 22 Marzo 2011, 23:28 pm »

Si "pincha" tu servidor, es que algo falla. Manejas mal la memoria.

Recurrir a otro método que no sea delete para memoria solicitada con new, como tu mismo has experimentado, da resultados imprevisibles. Como ya dije, no puedes saber si new usa malloc por debajo, y tanto delete como heap destroy hacen uso de free.

Regla de oro:
Free what you malloc, delete what you new.
En línea

milya777

Desconectado Desconectado

Mensajes: 23



Ver Perfil WWW
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #4 en: 22 Marzo 2011, 23:40 pm »

ok voy a tener en cuenta esa regla, voy a seguir probando donde introducir los deletes que por ahora no uso, y voy a seguir buscando proq aumenta si ser eliminada el uso de la memoria del programa

gracias
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #5 en: 23 Marzo 2011, 09:05 am »

En C o C++ no hay problemas de no se "libera" correctamente. Más bien, no la "liberas" correctamente. Fíjate que los destructores de tus clases llamen a destruir la memoria dinámica que generen etc etc etc.

También puedes probar a usar profilers como gprof, valgrind (su herramienta massif te da información de memoria, valgrind como tal de memory leaks) para er qué está pasando.

PD: no hace falta hacer doble post.
En línea

milya777

Desconectado Desconectado

Mensajes: 23



Ver Perfil WWW
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #6 en: 23 Marzo 2011, 16:45 pm »

Me fije esos programas pero son para unix según lo que busque,  hay uno para windows ibm rational purify pero no lo consigo todavía si lo encuentro aviso, mira pongo el código para que veas como libero la memoria

//creo el heap de memoria
   HANDLE heapDevolverPedidos;
   heapDevolverPedidos = HeapCreate(0,0,0);  
    if (heapDevolverPedidos == NULL) {
        cout << "Error al crear un heap de memoria\n" << endl;
        grabarLog("ERROR","Error al crear un heap de memoria","webServer.cpp");
      closesocket(cliente);
      _endthreadex(0);
    }


// Para asignar memoria lo hago así

      char* buffer;
   if ((buffer = new char[BUFFER]) == NULL){
      grabarLog("ERROR","Error al asignar memoria","webServer.cpp");
      exit(1);
   }

// Para destruir la mem

delete [] buffer;

// para destruir el heap de memoria hago esto

   if (HeapDestroy(heapDevolverPedidos) == FALSE){
      printf("Error al destruir heap de memoria\n");
      grabarLog("ERROR","Error al destruir heap de memoria","webServer.cpp");
   }



gracias por contestar

EI: juntando mensajes.

Hola hago otra pregunta siempre sobre este problema que no puedo resolver, si asigno memoria a una variable en un hilo cuando cierro el mismo o lo mato la memoria en c no se elilmina? se que c no tiene garbage collector, pero cuando elimino un proceso no se elimina su espacio de memoria,

y en el caso de que tenga que hacerlo yo, que lo hago como lo puse arriba está bien echo?

necesito su ayuda, gracias
« Última modificación: 29 Marzo 2011, 12:05 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
« Respuesta #7 en: 29 Marzo 2011, 12:04 pm »

Si usas new usa OTRO heap y no el que creaste, si usas esas funciones Heap* usalas completas, lee la MSDN y usa el sentido comun.

Memory management.
« Última modificación: 29 Marzo 2011, 12:07 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Este metodo que estoy usando esta bien?
.NET (C#, VB.NET, ASP)
enterariel 2 4,947 Último mensaje 6 Mayo 2009, 00:48 am
por MANULOMM
CleanMem 2.4.3: libera memoria RAM del sistema y optimiza el rendimiento
Noticias
wolfbcn 0 1,506 Último mensaje 21 Septiembre 2012, 20:21 pm
por wolfbcn
Eliminar dll que estoy usando
.NET (C#, VB.NET, ASP)
El Benjo 3 2,833 Último mensaje 6 Agosto 2015, 23:16 pm
por El Benjo
¿Estoy usando JScript o lo interpreto con C#?
.NET (C#, VB.NET, ASP)
DeMoNcRaZy 1 1,743 Último mensaje 11 Octubre 2015, 01:55 am
por Eleкtro
como se libera la memoria de un arbol? « 1 2 »
Programación C/C++
Beginner Web 11 4,177 Último mensaje 18 Noviembre 2018, 00:23 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines