【发布时间】: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 的代码。