簡體   English   中英

如何在c ++中刪除此2D數組

[英]How do I delete this 2D array in c++

在簡單的一維數組中:

node *nodes =  new node[MAX_NODES];

刪除:

delete [] nodes;

刪除數組中分配的所有節點。

但在這種情況下:

float (*buildingArray)[3] = new float[10][3];

這個語句是否使buildingArray成為3個浮點指針的單維數組? 這是解除分配線:

delete[] buildingArray;

上面的釋放是否delete了數組,但我懷疑它是否會刪除它的引用?

上面的取消分配是否刪除了數組?

是的,它確實。

只需遵循以下規則:

您需要分別調用deletedelete [] new []分別調用newnew []


如果你有一個指針數組,其中每個索引都分配了動態內存,你需要顯式循環它並顯式釋放每個數組元素。


另外,你最好使用std::vectorstd::array而不是動態分配的數組。

是的,它確實。 解釋是因為內存中沒有關於數組維數的信息。

如果你有一個3 * 4項數組,它與12項數組完全相同。 這就是您解決更改的特定元素(以線后方式存儲)的方式。

所以delete[]將完美地工作。

但是現在使用newdelete運算符並不常見智能指針 ,除非你真的有充分的理由自己控制分配。

new float[10][3]分配一個由10個3個floats組成的數組,並返回一個指向第一個元素(這是一個包含3個浮點數的數組)的指針。

在此指針上調用delete[]會導致刪除整個數組。

這兩種情況的唯一區別在於,在第一種情況下,存儲在動態分配的數組中的值的類型是float而在第二種情況下,類型是float[3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM