簡體   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