我在研究以下代码 (MSVC9) 为何会崩溃时遇到了一些麻烦:
//// the following compiles to A.dll with release runtime linked dynamically
//A.h
class A {
__declspec(dllexport) std::string getString();
};
//A.cpp
#include "A.h"
std::string A::getString() {
return "I am a string.";
}
//// the following compiles to main.exe with debug runtime linked dynamically
#include "A.h"
int main() {
A a;
std::string s = a.getString();
return 0;
} // crash on exit
很明显,这是由于可执行文件和DLL的不同内存模型所致。是不是因为 A::getString()
返回的字符串在 A.dll 中分配,在 main.exe 中释放了?
如果是这样的话,为什么会这样 - 以及在 DLL(或者执行文件)之间传递字符串的安全方法是什么?而且不使用自定义 deleter 的 shared_ptr 包装器。