0

C++/CLI 関数への .NET ラッパー クラスを作成しています。関数は内部的に int の配列 ( ) を使用しますが、.NET 側int*でクリーンを公開したいと考えています。List<int>^次のコードを使用して、C# List を int の C++ アンマネージ リストに変換しています。

を使用して割り当てられたメモリを解放していないという事実とは別にMarshal::FreeHGlobal、関数に問題はありますか? たとえば((count * 4) + 4)、配列の長さのバイトを割り当てる必要がありますか?

static int* ListToArray(List<int>^ list){

    // new array
    int count = list->Count;
    int* arr = (int*)(Marshal::AllocHGlobal(count * 4).ToPointer());

    // convert list to array
    for(int a = 0; a < count; a++){
        arr[a] = list[a];
    }
    return arr;
}
4

1 に答える 1

2

あなたのコードは正しいです。正しい量のメモリを割り当てます。代わりに、より表現力豊かな を4使用します。sizeof int

なぜあなたが を使っているのか不思議ですAllocHGlobalnewC++コードの方が適切だと思います。また、なぜ生のポインターを使用しているのか疑問に思います。std::vector<int>C++ コードの方が理にかなっているのではないでしょうか?

于 2013-03-28T11:34:37.697 に答える