Метод MyApp::SelectLanguage(int lang) видаляє існуючу m_locale, а потім створює новий екземпляр wxLocale.
Проблема виникає, коли ви неодноразово викликаєте метод SelectLanguage: ви видаляєте m_locale і відразу створюєте новий екземпляр. Якщо m_locale спочатку було nullptr, виклик delete для nullptr є безпечним. Однак, якщо воно не було nullptr (тобто вже було ініціалізовано), можливо, пам'ять не буде повністю звільнена відразу після виклику delete і перед наступним викликом new, що може викликати помилку сегментації.
спробуйте ось так
void MyApp::SelectLanguage(int lang)
{
if(m_locale)
{
delete m_locale;
m_locale = nullptr; // Встановлюємо його в nullptr після видалення
}
m_locale = new wxLocale(lang);
m_locale->AddCatalogLookupPathPrefix(wxGetCwd());
m_locale->AddCatalog(wxT("i18n"));
}