C / C ++中的動態記憶體分配是指程式員手動執行記憶體分配,動態分配的記憶體在堆上分配,非靜態和區域變數在堆疊上分配記憶體,

有什么應用?
動態分配記憶體的一種用途是分配可變大小的記憶體,而可變長度陣列除外,這是編譯器分配的記憶體無法實作的,
最重要的用途是為程式員提供了靈活性,無論何時需要和不再需要,我們都可以自由分配和取消分配記憶體,在許多情況下,這種靈活性會有所幫助,此類情況的示例是“鏈表”,“樹”等,
它與分配給普通變數的記憶體有何不同?
對于“ int a”,“ char str [10]”等常規變數,將自動分配和釋放記憶體,對于動態分配的記憶體,例如“ int * p = new int [10]”,程式員有責任在不再需要時釋放記憶體,如果程式員不釋放記憶體,則會導致記憶體泄漏(在程式終止之前不會釋放記憶體),
如何在C ++中分配/取消分配記憶體?
C使用malloc()和calloc()函式在運行時動態分配記憶體,并使用free()函式釋放動態分配的記憶體,C ++支持這些功能,并且還有兩個new和Delete運算子,它們以更好和更輕松的方式執行分配和釋放記憶體的任務,
本文全部涉及new和delete運算子,
new 運算子
新的運算子表示在免費存盤上分配記憶體的請求,如果有足夠的記憶體可用,則new運算子將初始化該記憶體,并將新分配和初始化的記憶體的地址回傳給指標變數,
使用new運算子的語法:要分配任何資料型別的記憶體,語法為:
pointer-variable =new data-type;
這里,pointer-variable是data-type型別的指標,資料型別可以是任何內置資料型別,包括陣列,也可以是任何用戶定義的資料型別,包括結構和類,
int *p = NULL;
p = new int;
初始化記憶體:我們還可以使用new運算子來初始化記憶體:
指標變數 =newdata-type(value);
int *p = new int(25);
float *q = new float(75.25);
分配記憶體塊: new運算子還用于分配data-type型別的記憶體塊(陣列),
指標變數 =new data-type[size];
其中size(一個變數)指定陣列中元素的數量,
int *p = new int[10]
為int型別的10個整數連續動態分配記憶體,并將指標回傳到序列的第一個元素,該元素分配給p(一個指標),p [0]表示第一個元素,p [1]表示第二個元素,依此類推,

普通陣列宣告與使用new
宣告普通陣列與使用new分配記憶體塊之間有區別,最重要的區別是,常規陣列由編譯器釋放(如果陣列是本地陣列,則在函式回傳或完成時釋放),但是,動態分配的陣列始終保留在那里,直到程式員將其釋放或程式終止為止,
如果運行時沒有足夠的記憶體怎么辦?
如果堆中沒有足夠的記憶體來分配,則新請求將拋出std :: bad_alloc型別的例外,以指示失敗,除非new運算子使用了“ nothrow”,在這種情況下它將回傳NULL指標,因此,最好在使用new程式之前檢查new產生的指標變數,

洗掉運算子
由于取消分配動態分配的記憶體是程式員的責任,因此使用C ++語言為程式員提供了delete運算子,
句法:
//釋放指標變數指向的記憶體
delete 指標變數;
在這里,指標變數是指向由new創建的資料物件的指標,
例子:
delete p; delete q;
要釋放指標變數指向的動態分配陣列,請使用以下形式的delete:
delete[] p;
本期的知識分享就到這里了,希望對大家有幫助~
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
C語言C++編程學習交流圈子,QQ群1090842465【點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

編程學習視頻分享:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/255843.html
標籤:其他
