diff --git a/win/win32/NetHackW.c b/win/win32/NetHackW.c index 033dc797c..2eee75939 100644 --- a/win/win32/NetHackW.c +++ b/win/win32/NetHackW.c @@ -252,6 +252,8 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, return 0; } +extern void free_menu_data(void); + void free_winmain_stuff(void) { @@ -271,6 +273,7 @@ free_winmain_stuff(void) windowdata[cnt].address = 0; } } + free_menu_data(); } #ifdef _MSC_VER diff --git a/win/win32/mhmain.c b/win/win32/mhmain.c index 053324db8..c0a6cd0b1 100644 --- a/win/win32/mhmain.c +++ b/win/win32/mhmain.c @@ -27,7 +27,7 @@ static TCHAR szMainWindowClass[] = TEXT("MSNHMainWndClass"); static TCHAR szTitle[MAX_LOADSTRING]; struct window_tracking_data windowdata[MAXWINDOWS]; extern void mswin_display_splash_window(BOOL); - +extern void free_menu_data(void); /* mhmenu.c */ LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); static LRESULT onWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam); diff --git a/win/win32/mhmenu.c b/win/win32/mhmenu.c index 0899bc747..121704b0d 100644 --- a/win/win32/mhmenu.c +++ b/win/win32/mhmenu.c @@ -95,6 +95,8 @@ static void SelectMenuItem(HWND hwndList, PNHMenuWindow data, int item, int count); static void reset_menu_count(HWND hwndList, PNHMenuWindow data); static BOOL onListChar(HWND hWnd, HWND hwndList, WORD ch); +static genericptr_t menu_data_to_free; +void free_menu_data(void); /*-----------------------------------------------------------------------------*/ HWND @@ -627,6 +629,8 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) data->menui.menu.items, data->menui.menu.allocated * sizeof(NHMenuItem)); if (!data->menui.menu.items) free(was); + else + menu_data_to_free = (genericptr_t) data->menui.menu.items; } if (data->menui.menu.items) { @@ -719,6 +723,14 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) } } + +void +free_menu_data(void) +{ + if (menu_data_to_free != 0) + free(menu_data_to_free), menu_data_to_free = 0; +} + /*-----------------------------------------------------------------------------*/ void LayoutMenu(HWND hWnd)