我今天有這個錯誤,原因是因爲我在調用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