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

Dil*_*lch 4 c++ arrays multidimensional-array delete-operator

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

double (*arrayName)[b][c];
Run Code Online (Sandbox Code Playgroud)

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

arrayName= new double[a][b][c];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Who*_*aig 10

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;
Run Code Online (Sandbox Code Playgroud)

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

将导致以下输出(不要打扰计数,其中有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()
Run Code Online (Sandbox Code Playgroud)