一.new與delete
c++記憶體分配的兩種方式:靜態分配和動態分配
靜態分配是在編譯時分配相應的儲存空間,因為是在編譯時分配,要求編譯時空間大小明確,陣列長度必須為常量,一旦編譯完成,這個陣列的長度就是固定不變的。
動態分配是程式執行期間根據實際需要動態申請或釋放記憶體。它不需要預先分配儲存空間,分配的空間可以擴大或縮小
使用malloc和free動態申請和釋放記憶體:
*new運算子結果是指向分配得到的記憶體空間的指標,如果沒有足夠的記憶體空間可以分配,其運算結果是乙個0值指標。
銷毀物件後,指標p1變成了沒有定義,然而它羽然存放所指向物件的位址,所以指標p1不再有效,被稱為迷途指標,通常在delete運算後將其設為null即0值指標,避免了迷途指標;
用new建立的動態物件使用完後,必須用delete銷毀它。
delete只能刪除由new建立的動態物件,否則將導致程式錯誤。
靜態記憶體管理有編譯器進行,程式設計師只是做対象定義(相當於分配),但是動態分配是按照程式設計師人為的指令進行。
動態分配和釋放必須對應,不釋放會記憶體洩漏,後果是隨著程式執行多次,可以使用的記憶體空間越來越少,而釋放已經釋放的記憶體會導致程式奔潰
靜態分配記憶體的生命期由編譯器自動確定,要麼是程式執行期,要麼是函式執行期。動態分配記憶體的生命期由程式設計師決定,即從分配時開始,至釋放時結束。特別地,動態分配記憶體的生命期允許跨多個函式。
靜態分配記憶體的物件有初始化,動態分配記憶體一般需要人為
的指令賦初始值
避免釋放記憶體後出現「迷途指標」,應及時設定為空指標*
2.動態分配記憶體應用
2.1動態分配陣列
2.2 動態分配字串
記憶體動態分配
陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...
動態分配記憶體
動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。c語言動態記憶體分配相關的函式。include void malloc size t size malloc的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤 置為enomem。教材...
動態分配記憶體
動態分配記憶體 動態分配記憶體也可以分配儲存區,這種方式可以在程式執行的時候臨時決定分配的儲存區大小 為了管理動態分配的記憶體,就需要使用一組標準函式 為了使用這些標準函式,需要包含stdlib.h標頭檔案 malloc 函式可以動態分配一組連續的位元組 這個函式需要乙個整數型別引數表示分配的位元組...