繁体   English   中英

在C ++中重新分配三维数组

[英]Deallocation of 3 dimensional array in C++

我在头文件中创建这样的数组:

double (*arrayName)[b][c];

并在cpp文件中像这样分配:

arrayName= new double[a][b][c];

其中a,b和c是基于我正在处理的数据大小的常量。

如何释放此数组? 我尝试在三维数组的释放中执行建议,但这给了我一个“警告C4154:删除数组表达式;转换为指针提供”并导致堆损坏错误。

我宁愿不改变向量,因为我正在处理重新利用的遗留代码,但需要保持与原始代码类似。 我已经不得不从使用静态分配更改为new / delete,因为我们正在使用的数据规模溢出了堆栈。

编辑:WhozCraig的方法似乎是正确的。 我认为我释放这个数组的方式(以及其他类似的)是我的问题,但我注意到我的代码中的另一个问题。 我想我已经解决了这个问题,一旦我的程序重新运行(至少需要一两天),我会报告回来。 感谢所有回复的人。

编辑2:事情仍然没有100%工作,但问题超出了这个问题的范围,我能够调整一些值,以使事情运行良好,完成工作。 再次感谢所有回复的人。

vector-delete应该适用于此。

static const int b = 10;
static const int c = 10;
double (*arrayName)[b][c] = NULL;
arrayName = new double[10][b][c];
delete [] arrayName;

如果你必须像这样动态地分配它,并希望证明解析器被正确触发...

#include <iostream>
using namespace std;

class MyObj
{
public:
    MyObj() : val(1.0) {};
    ~MyObj() { cout << "~MyObj()" << endl;}

private:
    double val;
};

int main()
{
    static const int b = 3;
    static const int c = 3;
    MyObj (*arrayName)[b][c] = NULL;
    arrayName = new MyObj[3][b][c];
    delete [] arrayName;
    return 0;
}

将导致以下输出(不要打扰计数,其中有27个)

~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()
~MyObj()

暂无
暂无

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

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