Когда я ввожу 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 и сбой.