2014-10-22 2 views
0

Когда я ввожу wxDialog, и я фокусирую один wxTextCtrl, ничего плохого не происходит, но как только я что-то изменяю в этом тексте, например, удаляя один символ, приложение падает с этим сообщение:wxWidgets debug assertion failed, xtree непересекается при изменении значения wxTextCtrl

«отлаживать утверждение не удалось: карта/установить итератор не разыменовываемыми»

последний метод, который я узнал, вызывается перед тем, разбивая это одна:

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 все время и, следовательно, не возвращает false в первом предложении IF. Внутри диалога и изменения текста значение ctrl изменяется на реальное значение 0x031194b0; то он входит в предложение IF, возвращает false и сбой.

ответ

0

Проблема возникла из-за другой модификации кода, что я до сих пор не нахожу, как это могло бы иметь этот эффект. Возможно внутреннее поведение библиотеки wxWidgets?

Смежные вопросы