当我输入一个wxDialog并且我关注一个wxTextCtrl时,没有什么不好的事情发生但是只要我修改该文本中的内容,比如删除一个字符,应用程序就会崩溃:
“debug assertion failed:map / set iterator not dereferencable”
我发现的最后一个方法在崩溃之前调用了这个:
bool wxWindowMSW::HandleKillFocus(WXHWND hwnd)
{
#if wxUSE_CARET
// Deal with caret
if ( m_caret )
{
m_caret->OnKillFocus();
}
#endif // wxUSE_CARET
#if wxUSE_TEXTCTRL
// If it's a wxTextCtrl don't send the event as it will be done
// after the control gets to process it.
wxTextCtrl *ctrl = wxDynamicCastThis(wxTextCtrl);
if ( ctrl )
{
return false;
}
#endif
// Don't send the event when in the process of being deleted. This can
// only cause problems if the event handler tries to access the object.
if ( m_isBeingDeleted )
{
return false;
}
wxFocusEvent event(wxEVT_KILL_FOCUS, m_windowId);
event.SetEventObject(this);
// wxFindWinFromHandle() may return NULL, it is ok
event.SetWindow(wxFindWinFromHandle(hwnd));
return GetEventHandler()->ProcessEvent(event);
}
在运行应用程序时,多次调用此方法; ctrl始终具有值0x00000000,因此在第一个IF子句中不返回false。 在对话框内并修改文本时,ctrl的值变为实际值0x031194b0;然后它进入IF子句,返回false,然后崩溃。
答案 0 :(得分:0)
问题来自另一个代码修改,我仍然没有找到它如何产生这种效果。 wxWidgets库的内部行为可能?