【发布时间】:2011-11-18 09:21:37
【问题描述】:
我正在创建一个这样的三维数组:
GLfloat ***tgrid;
//other code in between here
tgrid = new GLfloat**[nx];
for(int i = 0; i < nx; i++)
{
tgrid[i] = new GLfloat*[ny];
for(int j = 0; j < ny; j++)
{
tgrid[i][j] = new GLfloat[nz];
}
}
这是否意味着我应该像这样释放内存:
for(int i = 0; i < nx; i++)
{
for(int j = 0; j < ny; j++)
{
delete [] tgrid[i][j];
}
delete [] tgrid[i];
}
delete [] tgrid;
?
我知道它们应该以“相反”的顺序进行,但我不确定我是否做得对......这看起来是否正确?
【问题讨论】:
-
是的,这似乎是正确的。
-
看起来正确但肯定不推荐。您可以使用平面数组、每个维度的大小和简单的索引方案轻松完成此操作。这确实是大多数组织/公司/社团在处理多维数据时所做的事情,例如OpenGL。
-
哎呀,你可以用 real 3D 数组来做到这一点。 Various possibilities (in c99, but the options are closely parallel).
标签: c++ arrays memory multidimensional-array memory-management