以及動態內存傳遞的注意事項?
內存的三種分配方式:
1. 從靜態存儲區分配:此時的內存在程序編譯的時候已經分配好,并且在程序的整個運行期間都存在。全局變量,static變量等在此存儲。
2. 在棧區分配:相關代碼執行時創建,執行結束時被自動釋放。局部變量在此存儲。棧內存分配運算內置于處理器的指令集中,效率高,但容量有限。
3. 在堆區分配:動態分配內存。用new/malloc時開辟,delete/free時釋放。生存期由用戶指定,靈活。但有內存泄露等問題。 常見內存錯誤及對策 1. 內存分配未成功,卻被使用。 對策:使用內存之前檢查是否分配成功。用p!=NULL判斷。 2. 內存分配成功,未初始化就被使用。 內存的缺省值沒有統一的標準。大部分編譯器以0作為初始值,但不完全是。 對策:內存初始化時賦初值。 3. 內存操作越界。 對策:只能是小心了。
4. 釋放了內存,仍然使用。 (1) 使用顯示delete和free的野指針。 對策:釋放完內存,將指針置為NULL。 (2) 使用隱式delete和free的野指針。主要是指函數返回指向棧內存的指針或引用。 對策:當然是不要返回就可以了。
5. 未釋放內存,導致內存泄露。 用new/malloc開辟了內存,沒用delete/free釋放. 對策:new和delete的個數一定相同;malloc和free的個數一定相同;new[]和[]delete一定對應。
上一篇gis不顯示地圖怎么辦
下一篇CLIENT是什么