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)
我正在尝试访问最初作为函数中的指针数组传递的二维数组的值。此外,我希望此函数 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)