通过方法指针调用方法时内存已满

时间:2009-11-13 15:10:48

标签: symbian function-pointers

我有一个方法指针如下:

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

我通过指针iSoapActionComplete调用下面的方法,如下所示:

(iCallbacks.*iSoapActionComplete)( );

在我的Symbian S60 3rd Ed模拟器上,该功能被称为“Memory Full。尝试关闭某些应用程序”消息。

知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

如果没有通过方法指针直接调用函数,该函数是否有效?

该消息的一个可能原因是该函数正在离开KErrNoMemory,即-4,并且应用程序框架陷阱线束将捕获该假,从而产生适当的对话框。

例如,当operator new(TLeave)无法分配内存或将零参数传递给User::LeaveIfNull()时,就会发生这种假。有时,您甚至可以看到明确的User::Leave(KErrNoMemory)来电。

您可以TRAP()回调函数调用以自行捕获。更好的是,您应该修复功能本身,以免在正常的晴天情况下离开。

(另外,按照惯例,离开函数具有L后缀。由于您使用i前缀作为实例数据,您可能已经了解Symbian C ++命名约定。)