我正在为 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;
}