wxFlatNotebook的記憶體洩漏

2021-05-28 04:40:55 字數 1250 閱讀 7265

快樂蝦

[email protected]

本文適用於

wxwidgets-2.8.8

vs2008

windows xp

在使用wxflatnotebook時發生乙個很奇怪的記憶體洩漏:

m_pnotebook = new::wxflatnotebook(this, wxid_nbmain);

deletem_pnotebook;

即使這樣的**,依然會有記憶體洩漏。

看了乙個wxflatnotebook的建構函式,發現只要一建立

wxpagecontainer,就會有記憶體洩漏,轉而懷疑wxpagecontainer的問題,試了一下下面的**:

::wxpagecontainer* p = new::wxpagecontainer(this);

deletep;

果然,記憶體洩漏。看看wxpagecontainer的建構函式,並沒有發現什麼特別的東西,猜測是它的訊息處理出了問題,遮蔽wxpagecontainer的所有訊息處理,再逐個開啟,發現在處理

wm_on_size

訊息時造成了記憶體洩漏,看看它的**:

voidwxpagecontainer::onsize(wxsizeevent& wxunused(event))

範圍進一步縮小到wxfnbrenderermgrst::get()函式,它的**:

typedefwxfnbsingletonwxfnbrenderermgrst;

template

t* wxfnbsingleton::get()

哈哈,ms_instance是動態分配的,這是個什麼東西?

template

t* wxfnbsingleton::ms_instance = 0;

原來是個靜態變數,那麼它是什麼時候釋放的?

template

voidwxfnbsingleton::free()

} 那麼誰來呼叫這個函式?

voidwxflatnotebook::cleanup()

這個也是個靜態函式,從函式名稱和wxfnbsingleton::ms_instance這個靜態變數可以猜測,在應用程式退出或者不再使用

wxflatnotebook

時,應用程式應該主動呼叫wxflatnotebook::cleanup函式來釋放記憶體。

兜了一圈,原來如此!遺憾的是wxflatnotebook自帶的demo居然也沒有在最後呼叫此函式,因此也有記憶體洩漏的現象發生!

container of 的的的原理

另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...

存在的就是合理的,發生的即是必然的。

筆者有時候會想,什麼是對,什麼是錯?對於追求某一件事情之前首先會考慮,為什麼我要做這件事情。所以經過自我分析和生活周邊環境的總結。我認為,對於乙個人來,這是在站在個體的角度上說。什麼是對的?就是你自己覺得是對的,它就是對的。不過這個只是你自己的想法。主觀上的正確,不代表客觀上也受到了別人的認可。就拿...

Apache的rewrite的重寫相關的引數

apache mod rewrite規則重寫的標誌一覽 使用mod rewrite時常用的伺服器變數 rewriterule規則表示式的說明 匹配任何單字元 chars 匹配字串 chars chars 不匹配字串 chars text1 text2 可選擇的字串 text1或text2 匹配0到1...