二維數組的動態分配和刪除

二維數組的動態分配和刪除

  首先,動態支持數組的分配,必須用   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);//釋放內存簡單方便.  
   

發佈了107 篇原創文章 · 獲贊 12 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章