diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp index 4bc6a13d81e..eecaab68978 100644 --- a/src/frontend/mame/ui/menu.cpp +++ b/src/frontend/mame/ui/menu.cpp @@ -162,8 +162,17 @@ void menu::global_state::stack_reset() void menu::global_state::clear_free_list() { + // free stack is in reverse order - unwind it properly + std::unique_ptr reversed; while (m_free) - m_free = std::move(m_free->m_parent); + { + std::unique_ptr menu(std::move(m_free)); + m_free = std::move(menu->m_parent); + menu->m_parent = std::move(reversed); + reversed = std::move(menu); + } + while (reversed) + reversed = std::move(reversed->m_parent); }