[英]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
了數組,但我懷疑它是否會刪除它的引用?
上面的取消分配是否刪除了數組?
是的,它確實。
只需遵循以下規則:
您需要分別調用delete
或delete []
new []
分別調用new
或new []
。
如果你有一個指針數組,其中每個索引都分配了動態內存,你需要顯式循環它並顯式釋放每個數組元素。
另外,你最好使用std::vector
或std::array
而不是動態分配的數組。
是的,它確實。 解釋是因為內存中沒有關於數組維數的信息。
如果你有一個3 * 4項數組,它與12項數組完全相同。 這就是您解決更改的特定元素(以線后方式存儲)的方式。
所以delete[]
將完美地工作。
但是現在使用new
和delete
運算符並不常見智能指針 ,除非你真的有充分的理由自己控制分配。
new float[10][3]
分配一個由10個3個floats
組成的數組,並返回一個指向第一個元素(這是一個包含3個浮點數的數組)的指針。
在此指針上調用delete[]
會導致刪除整個數組。
這兩種情況的唯一區別在於,在第一種情況下,存儲在動態分配的數組中的值的類型是float
而在第二種情況下,類型是float[3]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.