我想在我的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]',但這樣做更具可讀性,它不會改變代碼的功能。 – svick 2012-03-14 00:42:30
您通常不需要C++/CLI代碼的大量幫助來破壞堆。這不是。 – 2012-03-14 00:43:54
感謝您的確認。我的代碼在其他地方一定有一些錯誤;我會看看。謝謝你,拉傑。 – user392005 2012-03-14 03:29:12