0

我正在为 C++/CLI 函数创建一个 .NET 包装类。该函数在内部使用整数数组(int*),但我想List<int>^在 .NET 端公开一个清理。我正在使用以下代码将 C# 列表转换为 C++ 非托管 int 列表。

除了我没有使用 释放分配的内存这一事实之外,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更具表现力的 .

我很想知道你为什么要使用AllocHGlobal. 我认为new在 C++ 代码中会更合适。我也想知道你为什么使用原始指针。在 C++ 代码中不会std::vector<int>更有意义吗?

于 2013-03-28T11:34:37.697 回答