And*_*eek 1 memory-management c++-cli
我对 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
}
Run Code Online (Sandbox Code Playgroud)
当调用 free 时,我收到“检测到堆损坏:在 0x02198F90 处的正常块(#137)之后”。
为什么我会收到这个错误?
安德鲁·L
我认为您为字符串分配的内存块太小。每个字符占用 2 个字节(在 MSVC 中),因为它是一个宽字符串:
g_msg = (wchar_t*)realloc(g_msg, (wcslen(wchptr) + 1)*sizeof(wchar_t));
Run Code Online (Sandbox Code Playgroud)