【发布时间】:2016-02-15 10:25:40
【问题描述】:
我在模块间内存分配/释放方面遇到了一些问题。 this 的帖子似乎描述了同样的错误。
这是一段代码:
我的主要应用:
#pragma comment(lib, "mydll.lib")
__declspec(dllimport) std::shared_ptr<VOID> GetMemory(size_t size);
int wmain(int argc, wchar_t* argv[])
{
std::shared_ptr<VOID> lpMem = GetMemory(100);
return 0;
}
Dll代码:
__declspec(dllexport) std::shared_ptr<VOID> GetMemory(size_t size);
BOOL WINAPI DllMain(HINSTANCE, DWORD dwReason, LPVOID)
{
return TRUE;
}
std::shared_ptr<VOID> GetMemory(size_t size)
{
return std::shared_ptr<VOID>(new (std::nothrow) char[size]);
}
/MT 或 /MD 编译器标志均被正确处理。并且执行不会失败。
我的问题是:为什么std::shared_ptr 的解决方案可以正常工作?它有什么变化?那些在单个进程中不同的“内存管理器”(在线程linked above 中提到)是什么?这只是一个 CRT 抽象吗?或者,可能是 CRT 提供了一些特定的内存分配实现?
我认为,new / malloc / LocalAlloc 的任何调用都会导致HeapAlloc。我对吗?如果是这样,为什么new/delete-calls(没有用std::shared_ptr包裹)在单个进程内的不同模块中会导致崩溃?
【问题讨论】:
标签: c++ memory-management shared-ptr