免责声明:内容仅供学习参考,请正当使用知识,克制举行违法犯罪运动!
内容参考于:易道云信息技能研究院
上一个内容:73.游戏分析工具的添加对象与删除对象
73.游戏分析工具的添加对象与删除对象 它的代码会报堆被粉碎的非常,堆被粉碎的非常紧张由两方面,第一个是内存超范围访问好比分配了10字节内存访问的时间访问了200个字节就是把是我们的内存给修改了就会堕落,第二个二次开释第一次的时间把内存开释了第二次又删然后windows有内存管理的机制第二次删的就会把别的地方的内存给删了,制止这种非常在用指针的时间肯定要初始化而且控制只删一次内存
COBJContext.h文件的修改
- #pragma once
- class COBJContext
- {
- CString txtFile;
- CString txtName;
- LPVOID Address;// 内存地址
- /**
- 内存地址不是一个简单的数字,它有可能是一个 基址 加上 一个数字,有可能还是一个指针算出来的
- 然后这种的通过字符串进行记录,让它通过字符串可以算出内存地址
- Address 与 txtAddress配套使用
- */
- CString txtAddress;
- DWORD Size{};
- CString txtNote;
- char* data{};
- public:
- COBJContext(const wchar_t* folder, const wchar_t* _name);
- COBJContext(const wchar_t* folder, const wchar_t* _name, const wchar_t * _address, DWORD _size, const wchar_t* _note);
- ~COBJContext();
- public:
- void Save();
- void Delete();
- BOOL UpdateData(HANDLE _hProcess);
- void Set(const wchar_t* _name, const wchar_t* _address, DWORD _size, const wchar_t* _note, bool IsSet=true);
- public:
- DWORD GetSize();
- CString& GetAddress();
- CString& GetNote();
- };
- typedef struct TREE_DATA {
- DWORD MenuId{};
- LPVOID DATA_PTR{};
- }*PTREE_DATA;
复制代码 CwndRAN.cpp的修改
- void CwndRAN::OnNMRClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- // TODO: 在此添加控件通知处理程序代码
- *pResult = 0;
- DWORD dMenuId = 1;
- if (hProcess) {
- auto hSel = mTree.GetSelectedItem();
- if (hSel) {
- PTREE_DATA val = (PTREE_DATA)mTree.GetItemData(hSel);
- if (val)dMenuId = val->MenuId; else dMenuId = 0;
- }
- else dMenuId = 2;
- }
- if (dMenuId == 0)return;
- // 获取最后一个消息发生时的鼠标位置
- DWORD dwPos = GetMessagePos();
- CPoint point(LOWORD(dwPos), HIWORD(dwPos));
- CMenu menu;
- menu.LoadMenuW(IDR_MENU1);
- CMenu* pop = menu.GetSubMenu(dMenuId);
- pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
-
- }
- void CwndRAN::DeleteItemEx(HTREEITEM h)
- {
- PTREE_DATA val = (PTREE_DATA)mTree.GetItemData(h);
- if (val)delete val;
- mTree.DeleteItem(h);
- }
- void CwndRAN::OnDeleteClass()
- {
- // TODO: 在此添加命令处理程序代码
- auto hSel = mTree.GetSelectedItem();
- auto hRoot = mTree.GetRootItem();
- if (hSel == hRoot)return;
- auto h = GetFirstItem(hSel);
- PTREE_DATA VAL = (PTREE_DATA)mTree.GetItemData(h);
- if (VAL) {
- COBJContext* p = (COBJContext*)VAL->DATA_PTR;
- if (p) {
- p->Delete();
- delete p;
- }
- }
- DeleteItemEx(h);
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |