如何设置指针内存地址?游戏内存写入指针赋值报错求助
解决指针赋值时的类型不匹配错误
这个报错的核心问题是整数类型和指针类型的位数不匹配,加上编译器禁止整数到指针的隐式转换,咱们一步步拆解解决:
为什么会报错?
你给出的内存地址0x17F10D12520是一个64位地址(长度远超32位地址的最大值0xFFFFFFFF),而DWORD*是指向32位无符号整数的指针:
- 在64位编译环境中,指针本身是64位长度,但
DWORD是32位类型,直接把64位整数赋值给DWORD*会触发类型不匹配; - 编译器默认禁止整数到指针的隐式转换——这种操作风险较高,必须显式声明转换意图。
具体解决方案
方案1:使用64位指针类型并显式转换
既然游戏是64位进程(从64位地址就能判断),直接用DWORD64*作为指针类型,并用reinterpret_cast完成强制转换:
DWORD64* point = reinterpret_cast<DWORD64*>(0x17F10D12520);
如果你的生命值是32位的DWORD类型,也可以用DWORD*,但同样需要显式转换:
DWORD* point = reinterpret_cast<DWORD*>(0x17F10D12520);
方案2:用通用指针类型uintptr_t(更推荐)
uintptr_t是C++标准库中专门用来存储指针地址的整数类型,它的长度会自动匹配当前系统的指针位数(32位系统是32位,64位系统是64位),跨平台兼容性更好:
#include <cstdint> // 必须包含这个头文件才能使用uintptr_t uintptr_t health_addr = 0x17F10D12520; DWORD* point = reinterpret_cast<DWORD*>(health_addr);
额外注意事项
- 编译位数必须匹配:你的修改工具必须和游戏进程的位数一致(游戏是64位,就把你的程序编译成64位;32位游戏的地址不会这么长),否则即使指针赋值成功,也无法正确访问内存。
- 完整内存修改流程:如果后续要写入生命值,别忘了用
WriteProcessMemory函数,需要先获取游戏进程的句柄,确保有足够的内存访问权限。
内容的提问来源于stack exchange,提问作者iZeusify
相关产品推荐
相关产品推荐

