gpt4 book ai didi

C++数组通过函数引用初始化

转载 作者:行者123 更新时间:2023-11-30 01:47:43 25 4
gpt4 key购买 nike

我正在开展一个项目,该项目需要许多动态大小的二维数组,这些数组需要可以跨函数访问。我正在处理的代码为此使用了像 double** dynArray 这样的指针。

R = ...; // ROWS of the matrix, unknown prior to runtime 
C = ...; // COLUMNS of the matrix, unknown prior to runtime

double** dynArray;

检查现有代码后,我发现数组目前总是像这样初始化:

double** dynArray = new double*[R];
for(int r=0; r<R; r++){dynArray[r] = new double[C];}

为了提高可读性,我想写一个方法来做上面的事情。这是我想出的分配

void initialize2D(double*** data, int R, int C){

(*dynArray) = new double*[R];

for(int r=0; r<R; r++){

(*dynArray)[r] = new double[C];

for(int c=0; c<C; c++){
(*dynArray)[r][c] = 0;
}
}
}

分别释放内存:

void free2D(double*** data, int R, int C){

for(int r=0; r<R; r++){
delete[] (*data)[r];
}
delete *data;
}

我打算像这样使用这些方法:

R = ...; // ROWS of the matrix, unknown prior to runtime 
C = ...; // COLUMNS of the matrix, unknown prior to runtime

double** dynArray;
initialize2D(&dynArray, R, C);
/* do stuff*/
free2D(&dynArray,R,C);

在实现这些功能后,我运行了 Valgrind,发现它符合

  • 绝对迷路,有时
  • 可能迷路了

问题是什么?通过引用函数初始化的正确方法是什么?

最佳答案

按如下方式编写函数

double ** initialize2D( int R, int C )
{
double **dynArray = new double *[R];

for ( int r = 0; r < R; r++ )
{
dynArray[r] = new double[C]();
}

return dynArray;
}

void free2D( double **data, int R )
{
for ( int r = 0; r < R; r++ ) delete [] data[r];
delete [] data;
}

然后按以下方式调用函数

double** dynArray = initialize2D( R, C );
/* do stuff*/
free2D( dynArray, R );
dynArray = nullptr;

考虑到您可以使用标准容器 std::vector<std::vector<double>>而不是自己动态分配数组。

关于C++数组通过函数引用初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230610/

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