[英]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.