天天看點

釋放動态建立的二維數組時出現記憶體通路異常

double** arrM = NULL; // 存儲i到j組成的多邊形的總的弦長總和

arrM = new double*[n]; 

for(i=0; i<n; i++)

{

arrM[i] = new double[n];

// 和i臨着的1,2個點的三角分割都是0

arrM[i][i] = 0;

arrM[i][i+1] = 0;

arrM[i][i+2] = 0;

}

紅色字型标注具有非法的記憶體通路權限,最直接的例子是對最後一行資料,不過程式運作到這不會出現錯誤。

在你釋放記憶體是會出現錯誤,個人猜測錯誤原因應該由于你的非法寫,導緻數組的特殊結束标記被覆寫,是以釋放記憶體時程式不知道到哪結束而出現異常,比如n=4,你釋放arrM[2]時,會出現錯誤,因為arrM[2][4]存在非法寫,到時數組的結束标記被擦除,程式不知道到哪是結束的标記。

繼續閱讀