Programación General => C/C++ => Mensaje iniciado por: diego.martinez en Viernes 23 de Mayo de 2008, 14:36
Título: Liberar Memoria Localizada En Una Dll
Publicado por: diego.martinez en Viernes 23 de Mayo de 2008, 14:36
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
Título: Re: Liberar Memoria Localizada En Una Dll
Publicado por: Eternal Idol en Viernes 23 de Mayo de 2008, 14:50
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
char *mem = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY /*no hace falta usar ZeroMemory a mano*/, size);
En tu programa, liberas con HeapFree y obviamente el mismo HEAP anterior. Ej.
Código: Text
HeapFree(GetProcessHeap(), 0, mem);
Título: Re: Liberar Memoria Localizada En Una Dll
Publicado por: diego.martinez en Viernes 23 de Mayo de 2008, 15:13
muchas gracias, era eso. Ya he podido arreglarlo.
anotado y aprendido.
Título: Re: Liberar Memoria Localizada En Una Dll
Publicado por: Eternal Idol en Viernes 23 de Mayo de 2008, 15:19
De nadas, lo mejor igual es seguir usando malloc/free o new/delete y que solo la DLL se encargue de su memoria.