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 に答える