// dll
#include <memory>
__declspec(dllexport) std::auto_ptr<int> get();
__declspec(dllexport) std::auto_ptr<int> get()
{
return std::auto_ptr<int>(new int());
}
// exe
#include <iostream>
#include <memory>
__declspec(dllimport) std::auto_ptr<int> get();
int main() {
{
std::auto_ptr<int> x = get();
}
std::cout << "done\n";
getchar();
}
下面的代碼運行在VC9完全確定。但是,在VC6下,我將遇到以下消息的立即崩潰。使用auto_ptr DLL引起死機
Debug Assertion Failed!
計劃: C:\項目\ use_dynamic_link \調試\ use_dynamic_link.exe 文件:dbgheap.c行:1044
表達: _CrtIsValidHeapPointer(pUserData)
它是出口的auto_ptr下VC6是不允許的?
這是一個已知的問題,即通過DLL導出STL集合類。
但是,我身邊谷歌並沒有看到任何提及性病:: auto_ptr的。
任何解決方法?
爲什麼在VC9中不會出現這個問題? – 2010-04-16 07:24:12
好的。我確實發現爲什麼這個問題不會發生在VC9中。在VC9中,我動態鏈接到運行時庫。在VC6中,我使用靜態鏈接。看到我額外發布的答案。 – 2010-04-17 04:42:28