gpt4 book ai didi

c++ - C++ 中 3 维数组的重新分配

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:15 24 4
gpt4 key购买 nike

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

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

然后在cpp文件中这样分配:

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

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

如何释放这个数组?我尝试按照 Deallocation of 3 dimensional array 中的建议进行操作,但这给了我一个“警告 C4154:删除数组表达式;转换为提供的指针”并导致堆损坏错误。

我不想更改为 vector ,因为我正在处理正在重新调整用途但需要尽可能与原始代码保持相似的遗留代码。我已经不得不从使用静态分配更改为新/删除,因为我们正在处理的数据规模正在溢出堆栈。

编辑: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()

关于c++ - C++ 中 3 维数组的重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12695467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com