動態分配空陣列

2021-06-27 06:04:56 字數 686 閱讀 4169

c++雖然不允許定義長度為0的陣列變數,但明確指出,呼叫new動態建立長度為0的陣列是合法的。

char  arr[0] ;     //錯誤

char  *cp   =   new   char[0] ;  //正確

用new動態建立長度為0的陣列時,new返回有效地非零指標。該指標與new返回的其他指標不同,不能進行解引用操作,它畢竟沒有指向任何元素。

可以做的操作:比較運算,因此該指標能在迴圈中使用;在該指標上加減0;或減去本身,得0值。

動態分配的記憶體最後必須進行釋放,否則,記憶體最終將會逐漸耗盡。如果不在需要使用動態建立的陣列,必須顯式地將其占用的儲存空間返還給程式的自由儲存區。c++語言為指標提供delete表示式釋放指標所指向的陣列空間。     

delete  [ ]    pia;  //該語句**了pia所指向的陣列,把相應的記憶體返還給自由儲存區。如果漏掉了空方括號,這是乙個編譯器無法發現的錯誤,將導致程式在執行時出錯。

理論上,**陣列時缺少空方括號對,至少會導致執行時少釋放了記憶體空間,從而產生記憶體洩露。對於某些系統或元素型別,可能更嚴重的執行時錯誤。

通常是因為在編譯時無法知道陣列的維數,所以才需要動態建立該陣列。採用這種技術要比建立固定大小的陣列安全。

標準庫函式strlen返回的是字串的長度,並不包括字串結束符 ,在獲得的字串長度必須  加1以便在動態分配時預留結束符的儲存空間。

動態分配陣列

注意,刪除操作不會刪除該指標 它刪除指標所指向的記憶體!動態分配陣列 動態陣列的宣告讓我們執行程式時選擇自己的大小。動態分配陣列,我們使用新的和刪除陣列形式 通常稱為新的 和 刪除 123 4int nsize 12 int pnarray new int nsize note nsize does...

動態分配記憶體(陣列)

已知正整數n,你要利用malloc函式動態開闢乙個長度為n的整型陣列,然後讀取n個整數存入該陣列中。再將這n個整數全部改為其相反數 例如10的相反數是 10,10的相反數是10 的10倍,然後將其輸出。最後你要利用free函式將該動態陣列所占用的空間釋放。int a,n scanf d n a in...

mallco動態分配 malloc動態分配多維陣列

下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦 重點 1 深刻理解多維陣列的概念,多維陣列在記憶體中的分配情況,基本上動態分配也沒什麼問題的。然後還要注意一點的就是,釋放是分配的逆過程!include include include void main void int ...