我的程序是这样一个逻辑。 首先创建用户列表,点击列表项弹出菜单,点击菜单上“设备选项”,弹出设备列表,上面显示这个用户拥有的设备。
菜单的创建参考了这为博主的教程:http://www.cnblogs.com/Alberl/category/520438.html
如图点击列表项,弹出菜单中点击“设备”,运行新的窗口 “设备列表”。
接下来问题出现了,上面操作重复两遍,会在第二次关闭设备列表的时候 发生异常,程序崩溃。
这就让我非常头痛了。
我知道这种错误是内存访问问题,一般都是指针操作不当造成的。
调试程序,中断发生位置是notify函数(duilib响应函数)结束位置。总之不是发生错误的位置。
下面贴出菜单程序源代码:
MenuWnd2.h:
#pragma once #include <windows.h> #include "my_duilib.h" #include <iostream> class CUserManageMenuWnd: public CXMLWnd { public: explicit CUserManageMenuWnd(LPCTSTR pszXMLPath,int tag); protected: virtual ~CUserManageMenuWnd(); // 私有化析构函数,这样此对象只能通过new来生成,而不能直接定义变量。就保证了delete this不会出错 public: void Init(HWND hWndParent, POINT ptPos); virtual void OnFinalMessage(HWND hWnd); virtual LRESULT HandleMessage (UINT uMsg, WPARAM wParam, LPARAM lParam); virtual LRESULT OnKillFocus (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); virtual void Notify( TNotifyUI& msg ); private: int tag; };
MenuWnd2.cpp:
#include "MenuWnd2.h" #include "my_including.h" #include "page_info.h" #include "mysql_utils.h" #include "user_dev_lst.h" extern c_page_info page_info; extern user_sel_ret* user_arr; CUserManageMenuWnd::CUserManageMenuWnd( LPCTSTR pszXMLPath, int tag) : CXMLWnd(pszXMLPath){