【问题标题】:Adding number to pointer value将数字添加到指针值
【发布时间】:2021-10-06 10:13:34
【问题描述】:

我正在尝试使用以下表达式将数字添加到指针值:

&AddressHelper::getInstance().GetBaseAddress() + 0x39EA0; 

&AddressHelper::getInstance().GetBaseAddress() 的值始终为 0x00007ff851cd3c68 {140700810412032}

我不应该得到0x00007ff851cd3c68 + 0x39EA0 = 7FF81350DB08吗?

当我得到:0x00007ff851ea3168 或有时0x00007ff852933168 或其他一些数字。

我是不是拿错了指针值?

【问题讨论】:

  • 指针算法考虑到指针的类型...
  • (0x00007ff851ea3168 - 0x00007ff851cd3c68) / 0x39EA0 = 0x08,所以我怀疑这是你的结构/类型的大小。
  • @Kaihaku:见Pointer_arithmetic。它是迂腐的 UB,即使它可能对大多数编译器在实践中有效。
  • @Kaihaku 标准决定了什么是UB,什么不是UB。说某事是“一个不起眼的微控制器上的 UB”是没有意义的。
  • 迂腐,您不能拥有/使用任意地址。然后编译器可能会决定对某些 UB 做什么,但它不再包含在 C++ 规则中。平台可能会在特定地址提供“缓冲区”。另请注意,一些编译器会删除导致 UB 的代码。

标签: c++ pointer-arithmetic


【解决方案1】:

使用指针运算,类型被考虑在内,

这样:

int buffer[42];
char* start_c = reinterpret_cast<char*>(buffer);
int *start_i = buffer;

我们有

  • start_i + 1 == &amp;buffer[1]
  • reinterpret_cast&lt;char*&gt;(start_i + 1) == start_c + sizeof(int)
  • 和(当sizeof(int) != 1reinterpret_cast&lt;char*&gt;(start_i + 1) != start_c + 1

在你的情况下:

0x00007ff851ea3168 - 0x00007ff851cd3c68) / 0x39EA0 = 0x08

sizeof(DWORD) == 8

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多