【发布时间】:2012-03-14 00:36:45
【问题描述】:
我正在尝试在我的 C++/CLI 包装器中将托管字节数组转换为 std::string;但是,我稍后会在堆中看到一些损坏的内存。只是想检查我是否正确地进行了转换。下面是我的方法是 CLI:
string ByteArrayToStr(array<Byte>^ byteArray)
{
int size = byteArray.Length;
IntPtr pnt = Marshal::AllocHGlobal(size + 1);
char* chararray = (char*)pnt.ToPointer();
try
{
Marshal::Copy(byteArray, 0, pnt, size);
*(chararray + size) = 0;
return string(chararray);
}
finally
{
Marshal::FreeHGlobal(pnt);
}
}
上面的代码有什么问题吗?
【问题讨论】:
-
我在该代码中看不到任何问题。我会将
try块中的第二行更改为使用chararray[site],但这会更具可读性,它不会改变代码的作用。 -
您通常不需要 C++/CLI 代码的大量帮助来破坏堆。不是这个。
-
感谢您的验证。我的代码在其他地方一定有一些错误;我来看看。谢谢你,拉杰。
标签: c++ c++-cli unmanaged-memory