在初步學習c++時,遇到分配和釋放。下面進行個人的最簡短的總結
【規則1】用malloc或new申請記憶體之後,應該立即檢查指標值是否為null。防止使用指標值為null的記憶體。
【規則2】不要忘記為陣列和動態記憶體賦初值。防止將未被初始化的記憶體作為右值使用。
【規則3】避免陣列或指標的下標越界,特別要當心發生「多1」或者「少1」操作。
【規則4】動態記憶體的申請與釋放必須配對,防止記憶體洩漏。
【規則5】用free或delete釋放了記憶體之後,立即將指標設定為null,防止產生「野指標」。
上述幾條規則摘自前輩:
1、記憶體申請。
個人理解,記憶體申請和定義乙個陣列的作用是類似的,都是用來存放一段資料,以便之後的訪問。在記憶體申請的時候使用new操作。申請完之後要確保不是空,並且賦予初值。可以參照下述操作:
byte* pbuf = null;
pbuf = new byte[lengthcount];
if(pbuf != null)
這樣就申請了一段記憶體,並且給定了初值。其中資料型別需要的長度需要注意。符合上述規則1、2
2、記憶體的釋放
在使用完自己申請的記憶體後,需要釋放記憶體。即使你是在區域性函式中申請了記憶體,在使用結束之後依舊需要釋放,因為申請的記憶體代表的是一段位址,具有全域性效應。當然了,在程式結束的時候系統會自己清除的。
if (pbuf != null)
符合規則5。在釋放時候需要注意一下情況:1、確保此時的pbuf的值與當時申請時候指向的位址是一致的,如不一致雖然在程式編譯的時候沒有錯誤,但是正常使用程式的時候會出現不可預知錯誤,並且很難定位bug 2、鑑於上述情況,在使用此段記憶體的時候,可以再定義乙個臨時的指標ptmp,來完成訪問記憶體工作
記憶體申請 釋放
申請 我們使用mallco 向記憶體動態申請容量,那麼malloc 0 申請的到底是多大?明白一點,絕對不為0,malloc的時候程式會給分配乙個用於管理此程式快的結構體,其次由於更方便的管理記憶體,記憶體是需要對其的,那麼如果是對齊的,就並不一定為我們指定的大小,我們可以用malloc usabl...
C 記憶體申請與釋放
c語言中申請記憶體malloc,釋放記憶體free。c 中申請記憶體new,釋放記憶體delete。include include 注意頭檔名稱 using namespace std intmain 執行結果 關於c語言的記憶體使用方式本文不再贅述。malloc與free不能觸發構造和析構函式,但...
記憶體的申請和釋放
常規用法 virtualalloc lpvoid lpaddress,size t dwsize,dword flallocationtype,dword flprotect lpaddress,指定記憶體開始的位址。dwsize,分配記憶體的大小。flallocationtype,分配記憶體的型別...