如果它不是之前,它應該現在是明確的至少乙個案例中的指標是有用的。如果沒有乙個指標來儲存剛剛被分配的記憶體的位址,我們就無法訪問為我們分配的記憶體了!
動態記憶體分配如何工作?
您的計算機有記憶體(可能是很多),可用於應用程式使用。當您執行乙個應用程式時,您的作業系統將應用程式載入到記憶體中的一些應用程式中。您的應用程式使用的記憶體分為不同的區域,每個區域都有不同的目的。乙個區域包含您的**。另乙個區域用於正常操作(跟蹤函式呼叫,建立和銷毀全域性和區域性變數等)。我們會更多地談論那些後來的。然而,許多可用的記憶體只是坐在那裡,等待著被傳給程式,要求它。
當您動態分配記憶體時,您要求作業系統為您的程式的使用保留一些記憶體中的記憶體。如果它可以滿足這個請求,它將返回該記憶體的位址到您的應用程式。從這一點上,您的應用程式可以使用這個記憶體,因為它希望。當您的應用程式是用記憶體來完成的,它可以將記憶體返回給作業系統給另乙個程式。
與靜態或自動記憶體,該程式本身是負責請求和處理動態分配的記憶體。
初始化動態分配的變數
當你動態分配乙個變數,你也可以通過直接初始化初始化或統一的初始化(c++ 11):
345
6789
1011
1213
14#include int main()
規則:避免懸空指標,刪除後的記憶,所有的指標指向被刪除的記憶0(或nullptr在c++ 11)。
運營商新的可以失敗
當從作業系統中請求記憶體時,在罕見的情況下,作業系統可能沒有任何記憶體,以授予請求。
預設情況下,如果新的失敗,乙個bad_alloc丟擲異常。如果這個異常沒有妥善處理(它不會,因為我們還沒有覆蓋的異常或異常處理程式會簡單但),終止(崩潰)與未處理的異常錯誤。
在許多情況下,有新的丟擲乙個異常(或有你的程式崩潰)是不可取的,所以有乙個新的替代形式,可以使用,而不是告訴新的返回乙個空指標,如果記憶體不能分配。這是通過新增常數性病::新的關鍵字和配置型別之間不丟擲:
動態記憶體分配
在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...
動態記憶體分配
為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...
動態記憶體分配
c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...