Liberar Memoria

05/03/2004 - 00:25 por Willser F. González C. | Informe spam
Hola a todos,

Tengo el siguiente código:

1. char *pcCadena = NULL;
2. LlamarDLL(pcCadena);
3. Cuando se llama a [ LLamarDLL(...) ], dentro de esta función DLL se
reserva [ X ] cantidad de memoria para la variable [ pcCadena ];
4. Después de llamar a la función DLL grabo el contenido de [ pcCadena ] en
un archivo y el archivo queda bien.
5. Ahora necesito liberar la memoria reservada por [ FuncionDLL ] para [
pcCadena ].

Problema:

1. No puedo liberar la memoria ocupada (bastantica) por [ pcCadena ], ni con
(delete [ ] pcCadena), ni con (free(pcCadena)), pues me sale un error, tanto
en Debug como en Release.

2. En debug, sale este error:

File: dbgheap.c
Line: 1044
Expression: _CrtIsValidHeapPointer (pUserData)

3. Es necesario eliminar la memoria explícitamente?, será posible que esta
memoria sea liberada por la DLL cuando ésta se descargue?.

Les agradezco cualquier aporte o aclaración al respecto.

Entorno: Visual C++ 6.0 sobre Windows XP Prof.
Nota: La "aplicación" que llama a esta DLL es otra DLL de tipo ATL.
 

Leer las respuestas

#1 Rodrigo Corral González [MVP]
05/03/2004 - 09:14 | Informe spam
El problema es que no sabes como esta reservando memoria la dll (malloc,
new, CoTaskMemAlloc...), luego no sabes como tienes que liberar (free,
delete, CoTaskMemFree...).

El programador de la dll es quien debe documentar esto y proverte una
función para liberar o especificarte con cual debes liberar. No es seguro
que asumas que la dll liberará esa memoria.

Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net

Preguntas similares