我正在学习如何从我的 C# 代码中调用 C 代码。我想调用一个返回二维整数数组的 C 函数。此函数不接受任何参数。这是功能:
extern "C" _declspec(dllexport) int** intMatrixReturn()
{
int** A = (int**)malloc(3 * sizeof(int *));
for(int i = 0; i < 3; i++)
{
A[i] = (int*)malloc(3 * sizeof(int));
for(int j = 0; j < 3; j++)
{
A[i][j] = i * j;
}
}
return A;
}
这就是我试图在我的 C# 代码中访问数组的方式:
IntPtr ip = intArrayReturn();
int[] iarr = new int[9];
Marshal.Copy(ip, iarr, 0, 9);
foreach (var item in iarr)
{
Console.WriteLine(item);
}
这是我的控制台输出:
1
2
3
4218
86245572
86252624
0
0
0
我认为我的问题是我的 C# 代码。如何读取从 C 函数返回的 2D int 数组?此外,垃圾收集器是否释放保存 2D 数组的内存,还是应该在 C# 代码中这样做?
如果这是重复的,我深表歉意,但是我发现的有关 2D 数组的所有问题都涉及将它们从 C# 发送到 C,而不是相反。