Tengo un archivo EXE que utiliza un archivo DLL que utiliza otro archivo DLL. Esta situación ha surgido:Liberar memoria asignada en una DLL diferente
En el archivo DLL de 1:
class abc
{
static bool FindSubFolders(const std::string & sFolderToCheck,
std::vector<std::string> & vecSubFoldersFound);
}
En el archivo DLL 2:
void aFunction()
{
std::vector<std::string> folders;
std::string sLocation;
...
abc::FindSubFolders(sLocation, folders)
}
en modo de lanzamiento, todo funciona bien. Pero en modo de depuración, se me ocurre un error de aserción en el destructor de uno de los std::strings
en el vector de carpetas (cuando las carpetas se salen del ámbito al final de AFunction):
dbgheap.c : line 1274
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));
Supongo que esto es porque la memoria ha sido asignada en el archivo DLL 1, pero está siendo liberada en el archivo DLL 2.
El comentario en dbgheap.c
parece bastante insistente en que esto es un problema.
¿Por qué es esto un problema, cuando parece funcionar bien si simplemente lo ignoro? ¿Hay alguna forma de hacer esto que no sea afirmativa?
NO. IGNORAR . ASERCIONES – KeatsPeeks
NO. POSTERGACIÓN. ESO. ESO ES. POR QUÉ. YO PREGUNTÉ. = P – Smashery
Solo quiero saber * por qué * es un problema. – Smashery