在一个简单的vanilla WinForms应用程序(C ++ / CLI,设置为/ clr)中,我有以下模板函数,标记为“unmanaged”:
#pragma managed(push, off)
#include <string>
template< class c >
const c& test_alloc()
{
static c test_alloc;
return test_alloc;
}
#pragma managed(pop)
然后在main中,我在Application :: Run()之前使用它:
test_alloc<int>(); // OK
test_alloc<std::string>(); // Fails: _CrtIsValidHeapPointer(pUserData)
static int test_alloc工作正常,但静态字符串test_alloc失败,“你正在破坏堆”错误:_CrtIsValidHeapPointer(pUserData)。谁能向我解释这里发生了什么?
当我尝试使用boost :: filesystem :: initial_path()时,问题实际上就出现了。