2

我正在尝试在我的 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);
    }
}

上面的代码有什么问题吗?

4

1 回答 1

2

您正在执行不必要的显式复制并使用手动内存分配。

您可以将原始固定指针传递给std::string构造函数:

string ByteArrayToStr(array<Byte>^ byteArray)
{
    pin_ptr<unsigned char> temp = &byteArray[0];
    return string(reinterpret_cast<char*>(temp), byteArray->Length);
}
于 2012-03-14T03:00:37.687 回答