将2d数组指针传递给函数并在函数内部分配内存

时间:2015-11-08 20:44:52

标签: c++ pointers memory-management segmentation-fault dynamic-arrays

我有以下代码,我将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数组指针传递给用于分配内存和设置值的函数)

1 个答案:

答案 0 :(得分:2)

这样做:

*Matrix = new int* [rows];

说明:

三重指针包含双指针的地址 并且你想要为double创建数组。

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

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

如果我们在main中这样做,请考虑一下:

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

所以我们使用&amp;。

将地址矩阵转移到另一个有趣的地方

我希望我的解释有用。