gpt4 book ai didi

c++ - 将二维数组指针传递给函数并在函数内部分配内存

转载 作者:行者123 更新时间:2023-11-30 03:47:38 24 4
gpt4 key购买 nike

我有以下代码,我将一个二维动态数组传递给一个函数。该函数必须为数组分配内存并在其中插入值。

当我传递指针时,我接收到指针作为指向二维数组的指针。但是,当我尝试为其分配内存时出现错误。

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;
}

我收到错误:无法在 **Matrix = new int* [rows] 行的赋值中将‘int**’转换为‘int*’。

具体应该怎么做呢? (一个二维数组指针被传递给一个分配内存和设置值的函数)

最佳答案

只需这样做:

*Matrix = new int* [rows];

解释:

三指针包含双指针的地址实际上你想为 double 创建数组。

***Matrix(在 generateMatrix 函数中)是 **Matrix(来自 main)的地址

(在 generateMatrix 乐趣中)*矩阵是**矩阵(来自main)

想想看,如果我们在 main 中这样做:

int **Matrix;
Matrix = new int *[row];

所以我们使用 & 通过地址将 Matrix 传输到另一个有趣的地方。

希望我的解释对您有所帮助。

关于c++ - 将二维数组指针传递给函数并在函数内部分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com