在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;
这样做的好处是:
无论列数如何,只需要调用
new[]
和delete[]
两次。在前面的回答中,对new
和delete
的调用次数取决于列的数量。这样可以减少碎片,如果列的数量非常大,还可以提高速度。数据连续。你可以使用一个简单的偏移量来访问2d数组中的任何元素。
缺点是每行的列数必须相同,否则很难维护。
相关文章:
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何使用用户输入在C++中正确填充2D数组
- 导入库可以跨dll版本工作吗
- 如何在C++中检查2D数组中负值的输入验证
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 四边形的 2D 旋转
- 打印第二列时的2d字符矢量打印空间
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 在 c++ 中将文本文件读入 2D 版本
- 在c++中声明并删除这个版本的2D数组