繁体   English   中英

在C ++中声明和删除此版本的2D数组

[英]declare and delete this version of a 2D array in c++

int *array[10];
for(int i = 0; i < 10; i++)
    array[i] = new int[10];
//...
void passFunc(int *a[10]) //array containing pointers
{
    //...
}

passFunc(array); 

我试图弄清楚如何声明和删除此版本的2D数组。 我开始使用int **数组,但是为了使一段代码更容易,我需要切换到* []。 谁能帮我吗? 我试图编译我的实际代码(上面的代码只是一个例子),看起来像这样:

int* filedata[LENGTH] = new int*[LENGTH]; //ERROR: array must be initialized with brace- enclosed identifiers.

编辑:谢谢!

像这样

 int** array = new int*[sizeX];
 for(int i = 0; i < sizeX; ++i)
   array[i] = new int[sizeY];

删除

for(int i = 0; i < sizeX; ++i)
   delete [] array[i];
delete [] array;

如果我正确理解了您想要的内容,那么分配和释放将看起来像

int ** filedata = new int * [LENGTH];

for ( int i = 0; i < LENGTH; i++ ) filedata[i] = new int [LENGTH];

//...

for ( int i = 0; i < LENGTH; i++ ) delete [] filedata[i];
delete [] filedata;

给定版本的替代版本:

 int** array = new int*[sizeX];
 int *pool = new int[sizeX * sizeY];
 for(int i = 0; i < sizeX; ++i, pool += sizeY)
   array[i] = pool;

删除:

 delete [] array[0];
 delete [] array;

使用此方法的优点是:

  1. 无论列数是多少,只需两次调用new[]delete[] 在上一个答案中,对newdelete的调用数取决于列数。 这样可以减少碎片,如果列数非常大,也可能会提高速度。

  2. 数据是连续的。 您可以使用简单的偏移量从任何其他元素访问2d数组中的任何元素。

缺点是每行的列数必须相同,否则将很难维护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM