學習SYMBIAN,也再複習下記憶體管理的知識。

2021-04-09 07:47:46 字數 1023 閱讀 8726

發生記憶體錯誤是件非常麻煩的事情.編譯器不能自動發現這些錯誤,通常是在程式執行時才能捕捉到.而這些錯誤大多沒有明顯的症狀,時隱時現,增加了改錯的難度。象個定時炸彈似的。

下邊我列舉下程式中記憶體常見的錯誤:

記憶體申請沒有成功,但你你由於不知道卻使用了它。

記憶體分配雖然成功,但並沒有初始化。

記憶體分配成功,初始話成功,但操作記憶體越界。

記憶體沒有及時釋放,記憶體洩漏。

記憶體被釋放了,但你還以為它沒釋放,繼續使用它。

下邊先看下程式中記憶體是怎麼被分配的吧:有三種情況

全域性變數,靜態變數,靜態類等都被分配在記憶體中的靜態儲存區域。

在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放.棧記憶體  分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限

從堆上分配,亦稱動態記憶體分配.程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何 時用free或delete釋放記憶體.動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多.

下邊繼續介紹程式中記憶體錯誤:

(1)程式中的物件呼叫關係過於複雜,實在難以搞清楚某個物件究竟是否已經釋放了記憶體,此時應該重新設計資料結構,從根本上解決物件管理的混亂局面

(2)函式的return語句寫錯了,注意不要返回指向「棧記憶體」的「指標」或者「引用」,因為該內存在函式體結束時被自動銷毀

(3)使用free或delete釋放了記憶體後,沒有將指標設定為null.導致產生「野指標」

* 【規則7-2-1】用malloc或new申請記憶體之後,應該立即檢查指標值是否為null.防止使用指標值為null的記憶體

* 【規則7-2-2】不要忘記為陣列和動態記憶體賦初值.防止將未被初始化的記憶體作為右值使用

* 【規則7-2-3】避免陣列或指標的下標越界,特別要當心發生「多1」或者「少1」操作

* 【規則7-2-4】動態記憶體的申請與釋放必須配對,防止記憶體洩漏

* 【規則7-2-5】用free或delete釋放了記憶體之後,立即將指標設定為null,防止產生「野指標」.(沒完待續)

複習補充一下以前學習的HTML CSS的內容(一)

1.沒有內容的 html 元素被稱為空元素。空元素是在開始標籤中關閉的。在開始標籤中新增斜槓,比如 是關閉空元素的正確方法,html xhtml 和 xml 都接受這種方式。即使 在所有瀏覽器中都是有效的,但使用 其實是更長遠的保障。2.html 標籤對大小寫不敏感 等同於 許多 都使用大寫的 ht...

也來學習一下曾國藩

提起曾國藩,不知大家是否有這麼乙個印象,風雨飄搖,乙個略顯愚鈍的老者,卻扛起了挽救晚清命運的大旗 提起他的生平,經常描述的都是最後一次出山前是乙個人,出山後完全變成了另乙個人。這一點我不是很認同,雖然後面初三後他有了乙個天翻地覆的變化,但是所有的果都是之前種下的因,這肯定也是一步乙個腳印走過來的,只...

我也來學習一下sudo

關於sudo 的設定 step1 vi profile add usr local bin in path step2 vi etc sudoers add shenghp in below user alias u sysadmin aix shenghp runas alias u functi...