2011年2月18日 星期五

基本避免Memory Leak的技巧

很多程式初學者比較沒有在注意一些Memory處理上的問題。其實只要平時稍微注意一下,就可以避免掉很多問題,而且也可以讓你的程式更好以及更穩定。

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

TList *myList = NULL ;

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

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


轉貼自: http://blog.xuite.net/huenlil/note/5290923

沒有留言:

張貼留言