在C++中比較麻煩的就是對內存的動態操作,new後必須delete,否則就造成內存泄露,假如沒有正確地new,就會造成空指針或野指針的情況,導致數據被破壞,程序發生異常.
先看一段代碼
申請內存:
int** a;
a = new int*[10];
for (j = 0; j< 10; j++)
{
a[j] = new int[5];
}
int** a;
a = new int*[10];
for(j = 0; j < 10; j++)
{
a[j] = new int;
}
for(i = 0; i < 10; i++)
{
delete[] a[i];
a[i] = NULL;
}
delete[] a;
a = NULL;
}
申請的時候,一個是a[j] = new int[5];一個a[j] = new int;首先正確的是a[j] = new int[5]。錯誤的寫法是a[j] = new int。因爲後者沒有說明具體有多少元素,在後面的操作的時候,會指向野指針,同時在調用delete的時候,也會發生異常。