我今天有这个错误,原因是因为我在调用FreeLibrary()
之后使用从我的DLL内部分配的字符串。为什么在FreeLibrary()之后从DLL内部分配的内存变得无效?
这是一个复制崩溃的简单示例。这正好DLL:
void dllFunc(char **output)
{
*output = strdup("Hello"); // strdup uses malloc
}
这是在加载DLL的EXE:
void exeFunc()
{
char *output;
dllFunc(&output);
std::string s1 = output; // This succeeds.
FreeLibrary(dll);
std::string s2 = output; // This crashes with access violation.
}
我读的FreeLibrary()
的文档,但我找不到任何关于内存什么成为无效的,它被称为后。
编辑
我才意识到,我一直在使用VS2008工具链的DLL,同时使用VS2010工具链为EXE(我使用VS2010的IDE两种,但你可以选择从项目工具链设置)。为DLL设置工具链到VS2010以及删除崩溃。
每个DLL被分配其FreeLibrary则后释放堆() – mohaps 2013-03-08 18:37:29