我有以下代码,我将2d动态数组传递给函数。该函数必须为数组分配内存并在其中插入值。
当我通过指针传递时,我收到指针作为指向2d数组的指针。但是,当我尝试为它分配内存时,我收到错误。
void generateMatrix(int ***Matrix, int rows, int cols, int rank){
**Matrix = new int* [rows];
for(int rowIndex=0; rowIndex<rows; rowIndex++)
*Matrix[rowIndex] = new int[cols];
srand(time(NULL) + rank);
for(int rowIndex=0; rowIndex<rows; rowIndex++)
for(int colIndex=0; colIndex<cols; colIndex++)
*Matrix[rowIndex][colIndex]=rand();
}
int main(int argc, char** argv){
int rank, procSize;
int matSize;
int **Matrix = NULL;
matSize = atoi(argv[1]);
MPI_Init(&argc, &argv);
MPI_Comm globalComm = MPI_COMM_WORLD;
MPI_Comm_rank(globalComm,&rank);
MPI_Comm_size(globalComm, &procSize);
std::cout<<"The number of processes are"<<procSize<<std::endl;
std::cout<<"The rank of the process is "<<rank<<std::endl;
std::cout<<"The size of the matrix is "<<matSize;
//1D-row agglomeration each process is going to store a set of continguous rows
int localRows = matSize/procSize;
int *v;
gen(&v);
generateMatrix(&Matrix, localRows, matSize, rank);
MPI_Finalize();
return 0;
}
我得到错误:无法在行上的赋值中将'int **'转换为'int *'** Matrix = new int * [rows]。
应该如何做到这一点? (将2d数组指针传递给用于分配内存和设置值的函数)
答案 0 :(得分:2)
这样做:
*Matrix = new int* [rows];
说明:
三重指针包含双指针的地址 并且你想要为double创建数组。
*** Matrix(在generateMatrix fun中)是** Matrix(来自main)的地址
(在generateMatrix乐趣中) *矩阵是**矩阵(来自主要)
如果我们在main中这样做,请考虑一下:
int **Matrix;
Matrix = new int *[row];
所以我们使用&amp;。
将地址矩阵转移到另一个有趣的地方我希望我的解释有用。