• Sábado 14 de Diciembre de 2024, 20:52

Autor Tema:  Liberar Memoria Localizada En Una Dll  (Leído 1746 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Liberar Memoria Localizada En Una Dll
« en: Viernes 23 de Mayo de 2008, 14:36 »
0
Buenas:

Esta es la pregunta, si localizo memoria en una funcion de un procedimiento de una dll, y le paso el puntero a la aplicacion que esta usando esa instancia de dll, por que no puedo liberarla desde el programa anfitrion? es problema de los contextos?


gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Liberar Memoria Localizada En Una Dll
« Respuesta #1 en: Viernes 23 de Mayo de 2008, 14:50 »
0
El problema es que el HEAP usado es diferente. Cada libreria CRT (C Run Time) suele llamar a HeapCreate al iniciarse y su malloc usa ese HEAP devuelto. Para comprobarlo podes hacer una prueba como esta:

En tu DLL, reservar con HeapAlloc y para el HEAP usas GetProcessHeap asi no usas un HEAP privado sino el del proceso por defecto. Ej.

Código: Text
  1.  
  2. char *mem = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY /*no hace falta usar ZeroMemory a mano*/, size);
  3.  
  4.  

En tu programa, liberas con HeapFree y obviamente el mismo HEAP anterior. Ej.

Código: Text
  1.  
  2. HeapFree(GetProcessHeap(), 0, mem);
  3.  
  4.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Liberar Memoria Localizada En Una Dll
« Respuesta #2 en: Viernes 23 de Mayo de 2008, 15:13 »
0
muchas gracias, era eso. Ya he podido arreglarlo.

anotado y aprendido.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Liberar Memoria Localizada En Una Dll
« Respuesta #3 en: Viernes 23 de Mayo de 2008, 15:19 »
0
De nadas, lo mejor igual es seguir usando malloc/free o new/delete y que solo la DLL se encargue de su memoria.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.