我在一个需要优化的项目中工作,我想将代码的一部分从C#翻译成C++。我使用的是C++\CLI包装器,但我对这种方法非常陌生,还没有完全理解。以下代码在我运行程序时返回一个错误,我不知道原因。
C#程序如下:
int[,] Arr = new int[5, 5];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
Arr[i, j] = i + j;
}
}
test.MatrixComputation(Arr, Arr.GetLength(0));
C++/CLI项目如下:
void MatrixComputation(cli::array<int, 2> ^arr, int size)
{
pin_ptr<int> p_arr = &arr[0, 0];
pu -> ChangeArray((int**)p_arr, size);
}
非托管C++代码:
void Unmanaged::MatrixComputation(int** arr, int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
arr[i][j] = i + j; // line 27
}
}
std::cout << arr[2][2] << std::endl;
}
它编译得很好,但运行时出现以下错误:
*Line 27: System.NullReferenceException: Object reference not set to an instance of an object*
投双分球是一个糟糕的策略,但这是我唯一想到的。此外,我知道C++不像C#那样有2D数组,但我需要C#中的多维数组,我无法将其更改为编写锯齿数组Arr[][]。
提前谢谢。