74.游戏分析工具的非常定位和修复

[复制链接]
发表于 2026-2-10 17:20:02 | 显示全部楼层 |阅读模式
免责声明:内容仅供学习参考,请正当使用知识,克制举行违法犯罪运动!
内容参考于:易道云信息技能研究院
上一个内容:73.游戏分析工具的添加对象与删除对象
73.游戏分析工具的添加对象与删除对象 它的代码会报堆被粉碎的非常,堆被粉碎的非常紧张由两方面,第一个是内存超范围访问好比分配了10字节内存访问的时间访问了200个字节就是把是我们的内存给修改了就会堕落,第二个二次开释第一次的时间把内存开释了第二次又删然后windows有内存管理的机制第二次删的就会把别的地方的内存给删了,制止这种非常在用指针的时间肯定要初始化而且控制只删一次内存
COBJContext.h文件的修改
  1. #pragma once
  2. class COBJContext
  3. {
  4.     CString txtFile;
  5.     CString txtName;
  6.     LPVOID Address;// 内存地址
  7.     /**
  8.         内存地址不是一个简单的数字,它有可能是一个 基址 加上 一个数字,有可能还是一个指针算出来的
  9.         然后这种的通过字符串进行记录,让它通过字符串可以算出内存地址
  10.         Address 与 txtAddress配套使用
  11.     */
  12.     CString txtAddress;
  13.     DWORD Size{};
  14.     CString txtNote;
  15.     char* data{};
  16. public:
  17.     COBJContext(const wchar_t* folder, const wchar_t* _name);
  18.     COBJContext(const wchar_t* folder, const wchar_t* _name, const wchar_t * _address, DWORD _size, const wchar_t* _note);
  19.     ~COBJContext();
  20. public:
  21.     void Save();
  22.     void Delete();
  23.     BOOL UpdateData(HANDLE _hProcess);
  24.     void Set(const wchar_t* _name, const wchar_t* _address, DWORD _size, const wchar_t* _note, bool IsSet=true);
  25. public:
  26.     DWORD GetSize();
  27.     CString& GetAddress();
  28.     CString& GetNote();
  29. };
  30. typedef struct TREE_DATA {
  31.     DWORD MenuId{};
  32.     LPVOID DATA_PTR{};
  33. }*PTREE_DATA;
复制代码
CwndRAN.cpp的修改
  1. void CwndRAN::OnNMRClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3.     // TODO: 在此添加控件通知处理程序代码
  4.     *pResult = 0;
  5.     DWORD dMenuId = 1;
  6.     if (hProcess) {
  7.         auto hSel = mTree.GetSelectedItem();
  8.         if (hSel) {
  9.             PTREE_DATA val = (PTREE_DATA)mTree.GetItemData(hSel);
  10.             if (val)dMenuId = val->MenuId; else dMenuId = 0;
  11.         }
  12.         else dMenuId = 2;
  13.     }
  14.     if (dMenuId == 0)return;
  15.     // 获取最后一个消息发生时的鼠标位置
  16.     DWORD dwPos = GetMessagePos();
  17.     CPoint point(LOWORD(dwPos), HIWORD(dwPos));
  18.     CMenu menu;
  19.     menu.LoadMenuW(IDR_MENU1);
  20.     CMenu* pop = menu.GetSubMenu(dMenuId);
  21.     pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
  22.    
  23. }
  24. void CwndRAN::DeleteItemEx(HTREEITEM h)
  25. {
  26.     PTREE_DATA val = (PTREE_DATA)mTree.GetItemData(h);
  27.     if (val)delete val;
  28.     mTree.DeleteItem(h);
  29. }
  30. void CwndRAN::OnDeleteClass()
  31. {
  32.     // TODO: 在此添加命令处理程序代码
  33.     auto hSel = mTree.GetSelectedItem();
  34.     auto hRoot = mTree.GetRootItem();
  35.     if (hSel == hRoot)return;
  36.     auto h = GetFirstItem(hSel);
  37.     PTREE_DATA VAL = (PTREE_DATA)mTree.GetItemData(h);
  38.     if (VAL) {
  39.         COBJContext* p = (COBJContext*)VAL->DATA_PTR;
  40.         if (p) {
  41.             p->Delete();
  42.             delete p;
  43.         }
  44.     }
  45.     DeleteItemEx(h);
  46. }
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表