2009-11-13 46 views
1

我有一個方法指針象下面這樣:內存已滿通過它的方法指針調用一個方法

typedef void (MMsnInternalCallBacks::* FuncPtr)(); 
FuncPtr iSoapActionComplete;   

我打電話通過指針iSoapActionComplete像下面下面的方法:

(iCallbacks.*iSoapActionComplete)(); 

雖然功能被稱爲「Memory Full。嘗試關閉某些應用程序」的消息在我的Symbian S60 3rd Ed模擬器上閃爍。

任何想法爲什麼會發生這種情況。

回答

2

如果函數不是通過方法指針調用,而是直接調用,函數是否工作?

該消息的可能的原因是該函數與KErrNoMemory-4離開和Leave由應用程序框架陷阱捕獲的線束,從而在適當的對話框。

例如當operator new(TLeave)未能分配內存或將零參數傳遞給User::LeaveIfNull()時,會發生此類假期。有時甚至可以看到明確的User::Leave(KErrNoMemory)調用。

你可以TRAP()回調函數調用來抓你自己。更好的是,你應該修復這個功能本身,以避免在正常的晴天情況下離開。

(另外,按照慣例,在離開函數具有L後綴由於您使用的實例數據的i前綴,你可能知道的Symbian C++的命名約定。)

+0

laalto:雖然很難找到假期是由內存分配失敗引起的。我學到的教訓是對可以離開的每一個電話進行TRAP。謝謝。 – ardsrk 2009-11-18 13:28:41

+1

不要扣留每一個可以離開的電話。讓葉子傳播到足夠高的級別,以便您可以決定適當的恢復策略。應用程序框架的顯示對話框和終止(如果在應用程序構建期間離開)或繼續處理下一個事件(如果在事件處理期間離開,即最終在活動調度程序循環中)的策略實際上是相當好的通用策略。 – laalto 2009-11-20 10:00:46