我提出的一些對象的堆的2D陣列:數組如何在內存中存儲和刪除?
工序(1)
Obj **arr = new Obj *[n];
for (int i=0;i<n;i++)
{
arr[i] = new Obj[n];
}
//所以這產生2D ARR [N] [N] ...然後當我刪除它:
步驟(2)
for (int i=0;i<n;i++)
{
delete [] arr[i];
}
delete [] arr;
所以我仍然不知道這是什麼做刪除。它運行Obj的析構函數並標記操作系統告訴它這是現在可用的內存。
現在我真的不明白的是,當我再次執行Step(1)(刪除後)時,我將這些對象初始化爲奇怪的值,但這並不是在我第一次執行它時發生的初始化爲零)。我第一次幸運嗎?
我錯過了什麼嗎?我明白這一點,但它與我的問題有什麼關係? –
@JoshDM對不起,我感到困惑。你能不能發一個你的代碼的例子來產生'怪異'的init值?我試圖表達,如果你使用上面的代碼,你不會得到奇怪的價值,你刪除和新的任何時候。 – gongzhitaao
不幸的是我無法發佈實際的代碼。我得到它工作正常,但我真的不明白爲什麼當我調試刪除循環,我仍然可以訪問arr [0],arr [1],arr [0] [0],...這只是一個怪癖的調試器或是沒有被刪除? –