C++:在函数中作为 parameter/pointer 传递的二维数组的访问值

C++: access values of 2D array being passed as parameter/pointer in function

我正在尝试访问最初作为函数中的指针数组传递的二维数组的值。此外,我希望此函数 return 具有我已访问和处理的值的二维数组。

我理解指针的概念,但是我对二维数组的双指针概念有困难。如果我理解正确的话,迭代数组的第一个维度指向计算机内存中的一个位置,它本身指向计算机内存中值所在的另一个位置。这 2 个指向过程代表 2D。

现在,在我的代码中,我无法访问第二个指针的值,我不明白为什么。

extern "C" double cfun(double **indatav, int rows, int cols)
{

    double* *outdatav = new double*[rows];
    for (int i=0; i < rows; i++){
        outdatav[i] = new double*[cols];
        }

    for (int i=0; i < rows; i++){
        for (int j=0; j < cols; j++){
            outdatav[i][j] = indatav[i][j];
            }
        }
    return outdatav;
}

上面的代码是通过 Python 中的 ctypes 调用的,因此它有这个 extern... 但是 C++ 中的等价物只是删除这个 extern "C" 我现在已经在这个问题上花了很多时间,我认为我无法单独解决它,因此我们将不胜感激任何帮助。

extern "C" double cfun(double **indatav, int rows, int cols)

{

    double**outdatav = new double*[rows];
    for (int i=0; i < rows; i++){
        outdatav[i] = new double[cols];
        }

    for (int i=0; i < rows; i++){
        for (int j=0; j < cols; j++){
            outdatav[i][j] = indatav[i][j];
            }
        }
    return outdatav;
}

现在可以正常工作了。

 outdatav[i] = new double[cols];

在这行代码中,您将指针数组分配给了一个指针。相反,您必须为每个指针分配数组。

似乎双指针内存分配错误

double* *outdatav = new double*[rows];
for (int i=0; i < rows; i++){
    // outdatav[i] = new double*[cols]; // <- typo here
    outfatav[i] = new double [cols]; // <- replace with this
}

添加

函数的return类型与returned变量不匹配,需要修改return类型为double**

extern "C" double** cfun(double **indatav, int rows, int cols)