В простом ванильном приложении WinForms (C ++ / CLI, установленном в / clr) у меня есть следующая функция шаблона, помеченная как «неуправляемая»:
#pragma managed(push, off)
#include <string>
template< class c >
const c& test_alloc()
{
static c test_alloc;
return test_alloc;
}
#pragma managed(pop)
Тогда в основном я использую его перед 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 ().