You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++指针值加固定偏移量得到非预期结果问题咨询

错误原因
  • 你多写了一次取地址符&,导致表达式类型完全偏离预期
    你写的&AddressHelper::getInstance().GetBaseAddress()拿到的不是GetBaseAddress()返回的基址本身,而是这个返回值所在内存的地址。如果GetBaseAddress()返回的就是你需要的0x00007ff851cd3c68这个基址值,完全不需要加&取地址。
  • 指针算术默认按指向类型的大小为单位,不是按字节计算
    你取地址后得到的是指针类型,假设指向的是8字节大小的64位整数,加0x39EA0等效于加0x39EA0 * 8 = 0x1CF500字节,和你预期的直接加字节偏移的结果完全不一致。
  • 对临时返回值取地址属于未定义行为
    如果GetBaseAddress()是值返回(返回的是临时变量),对临时变量取地址是C++标准明确的未定义行为,运行结果完全不可控,这也是你每次得到的结果都不一样的原因。
修正方案

直接用返回的基址值做加法即可,如果你要确保加法是按字节偏移,可以先转成单字节指针类型再计算:

// 写法1:如果GetBaseAddress返回的本身就是指针类型
AddressHelper::getInstance().GetBaseAddress() + 0x39EA0;

// 写法2:如果GetBaseAddress返回的是整数类型的地址值,转成字节指针再偏移
reinterpret_cast<uint8_t*>(AddressHelper::getInstance().GetBaseAddress()) + 0x39EA0;

另外补充:你自己的预期计算存在错误,0x00007ff851cd3c68 + 0x39EA0的正确结果是0x7FF851D0DA08,你之前算的7FF81350DB08是计算失误。

内容的提问来源于stack exchange,提问作者Irbis77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:24:02