欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 74.游戏分析工具的异常定位和修复

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

2025/2/24 0:42:44 来源:https://blog.csdn.net/qq_36301061/article/details/141039726  浏览:    关键词:74.游戏分析工具的异常定位和修复

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院

上一个内容: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);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词