Память заполнена при вызове метода через указатель на метод - PullRequest
1 голос
/ 13 ноября 2009

У меня есть указатель на метод, как показано ниже:

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

Я вызываю метод ниже через указатель iSoapActionComplete, как показано ниже:

(iCallbacks.*iSoapActionComplete)( );

Во время вызова функции на эмуляторе Symbian S60 3rd Ed мигает сообщение «Память заполнена. Попробуйте закрыть некоторые приложения».

Любая идея, почему это может происходить.

1 Ответ

2 голосов
/ 14 ноября 2009

Работает ли функция, если она вызывается не через указатель метода, а напрямую?

Вероятной причиной появления сообщения является то, что функция завершается с KErrNoMemory, т. Е. -4, а отпускание перехватывается ловушкой каркаса платформы приложения, что приводит к соответствующему диалогу.

Такой отпуск происходит, например, когда operator new(TLeave) не может выделить память или нулевой аргумент передается User::LeaveIfNull(). Иногда вы можете даже увидеть явные User::Leave(KErrNoMemory) звонки.

Вы можете TRAP() вызов функции обратного вызова, чтобы поймать оставляет себя. А еще лучше - исправить саму функцию, чтобы она не уходила в нормальных сценариях солнечного дня.

(Кроме того, по соглашению, оставляющие функции имеют суффикс L. Поскольку вы используете префикс i для данных экземпляра, вы, вероятно, знаете о соглашениях по именованию Symbian C ++.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...