二維數組的動態分配和刪除
首先,動態支持數組的分配,必須用 new 來進行創建一段堆內存,其它的存貯區域不允許動態分配的產生。
其次,C++並沒有提供真正的動態多維數組語法,想動態分配數組,必須通過一維動態數組組合形成一個類似多維數組的存貯形式,並不像靜態分配多維數組,它們的用法雖說有些地方 有相似之處,但不完全相同。
再次,有些網友有一些很BT的分配方式。
例如:
int (*p)[4] = new int[3][4];
解釋:可能有些初學者認爲這樣是可取的,也是利用 new 分配的數組,就可以是動態的,那你的想法就錯了,它的分配必須得有最外層 const的支持—
int x = 3, y = 4;
int (*p)[y] = new int[x][y];//error,y必須是const。
所以這種方式不能達到真正的動態分配二維數組的目的,只能相當於半自動化的一個分配方式。
那麼如果依靠下面的這種方式是正確的:
例:
int x = 3, y = 4;
int *p = new int*[x];//創建一個動態 int* 型數組
for(int i = 0; i < y; ++i)
p[i] = new int[x]; //再創建一個動態 int 型數組
for (int i = 0; i < y; ++i)
{
delete p[i];//由裏至外,進行釋放內存。
p[i] = NULL;//不要忘記,釋放空間後p[i]不會自動指向NULL值,還將守在原處,只是釋放內存而已,僅此而已。
}
delete []p;
p = NULL;
它就是依靠一維數組的組合來完成,這樣創建的動態數組就是一個全自動的個分配方式。
例
void * buf = malloc(x * y * sizeof (int) ); //這也是一個好方法,簡單方便,但它是C裏面的分配方式。
free(buf);//釋放內存簡單方便.