close

記憶體漏失指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體。記憶體漏失並非指記憶體在物理上的消失,而是應用程式分配某段記憶體後,由於設計錯誤,導致在釋放該段記憶體之前就失去了對該段記憶體的控制,從而造成了記憶體的浪費。

 

 

 

基本避免Memory Leak的技巧 — garylee

http://huenlil.pixnet.net/blog/post/23312797-%5B%E8%BD%89%5D%E5%9F%BA%E6%9C%AC%E9%81%BF%E5%85%8Dmemory-leak%E7%9A%84%E6%8A%80%E5%B7%A7-

 

首先,是指標變數內容的問題。通常各位在使用指標時,可能習慣不給予初始值。其實這會造成一些問題。所以建議大家宣告指標變數時一律給予初值,若無法在宣告的同時一併配置記憶體,那麼請給予NULL作為初值。例如:

TList *myList = NULL ;

另 外,許多在delete後,大家可能也就不再理會該指標的內容了。其實,這也是會造成一些麻煩。因為記憶體被delete可能只是系統作一個記號在記憶配 置表中,表示該記憶體是free的。原來的記憶體內還是有原先的內容。但是你的程式一個不注意,又去把原來的指標拿起來用。如果馬上就出錯的話,這樣還 好。偏偏因為原來的內容都還在,所以這個錯誤會延遲產生影響。這種類型的Bug特別難抓!因為,你根本找不到引發問題的所在,如果你有個地方一直發生 Access Violation,可是該地方的程式碼你已經check過十幾次了,還是找不問題,那很可能你就是遇到這樣的問題。以前在寫一些程式時,我就曾經為了這 樣的Bug,弄了三天。可見其傷害有多大。

所以,當delete某指標後,其務必將其內容設為NULL。一方面是使用NULL指標,一定是馬上出錯。所以你的Bug一下就會抓到。另外一個
理由是如果你不小心重複delete同一個物件時,一樣會發生延遲影響的錯誤。但是delete一個NULL指標,在BCB內是什麼也不做。所以不
用擔心會發生問題。

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    大玩家闖天涯 發表在 痞客邦 留言(0) 人氣()