我正在學習如何從C#代碼中調用C代碼。我想調用一個C函數返回一個二維數組。這個函數沒有參數。下面是函數:如何從C代碼返回一個2D int數組到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#代碼中執行該操作?
我很抱歉,如果這是重複的,但我發現有關二維數組的所有問題都涉及將它們從C#發送到C,而不是其他方式。
你能告訴你你正在使用C#端的DLL導入函數嗎?另外,你是否將內存設置爲C端的任何內容;因爲如果你不這樣做,它會是隨機的。 – 2013-03-08 20:14:54