我对C ++很陌生,遇到了一个我无法解决的问题。我正在尝试将System :: String转换为wchar_t指针,我可以将其保留的时间超过函数的范围。一旦我完成它,我想要正确清理它。这是我的代码:
static wchar_t* g_msg;
void TestConvert()
{
pin_ptr<const wchar_t> wchptr = PtrToStringChars("Test");
g_msg = (wchar_t*)realloc(g_msg, wcslen(wchptr) + 1);
wcscpy(g_msg, wchptr);
free (g_msg); // Will be called from a different method
}
当调用free时,我得到“HEAP CORRUPTION DETECTED:正常块(#137)之后的0x02198F90。”
为什么我会收到此错误?
Andrew L
答案 0 :(得分:4)
我认为你为字符串分配了太小的内存块。每个字符占用2个字节(在MSVC中),因为它是一个宽字符串:
g_msg = (wchar_t*)realloc(g_msg, (wcslen(wchptr) + 1)*sizeof(wchar_t));
答案 1 :(得分:0)
System :: String是托管字符串类,而不是C ++字符串类。你需要转换为std :: wstring,它管理它自己的内存,而不是const wchar_t *。