關於C++的二維陣列的一個問題與解決
阿新 • • 發佈:2018-12-16
最近在做一個專案,過程中new了一個二維陣列來儲存中間變數。因為這些變數用完後就沒有用了再加上陣列規模有點大,就想把它刪除釋放空間。
double(*p1)[3 * length] = new double[number][3 * length];
然而在刪除陣列過程中遇到了一些麻煩,這是原本所用的程式碼:
for (int i = 0; i < 3 * length; i++)
{
delete [] p1[i];
}
delete [] p1;
結果是程式碼執行到這裡是總是出錯。
經過檢查,發現這段程式碼在i=0是能夠執行,但指標p1指向的空間會全部沒有了,之後再i=1時程式就會報錯。
之後將程式碼修改成下面這樣就能正確運行了。
// for (int i = 0; i < 3 * length; i++)
// {
// delete [] p1[i];
// }
delete [] p1;
然而查閱了網上的眾多資料,這個是一維陣列的刪除方法,二維陣列的刪除方法就是出錯的那段。難道我new的實際上是一個一維陣列?但是我按二維陣列來使用並沒有出錯。奇怪,先記錄下來,等我水平再提高之後再探究一下。