在修改wxTextCtrl值时,wxWidgets调试断言失败,xtree not deferencable

时间:2014-10-22 07:50:11

标签: c++ wxwidgets

当我输入一个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,然后崩溃。

1 个答案:

答案 0 :(得分:0)

问题来自另一个代码修改,我仍然没有找到它如何产生这种效果。 wxWidgets库的内部行为可能?