我有以下代码行: (其中a是int64_t *,而我是一个简单的int计数器)
uintptr_t p = *a + (i * 4);
int64_t value = *reinterpret_cast<int64_t *>(p); //***
我已经按照以下堆栈溢出文章来获取此语法: C++ - Get value of a particular memory address
问题是我在指示的行上不断出现分段错误。 我认为这可能与指针算法有关,但我不确定。有谁知道我为什么会在这里出现段错误?
答案 0 :(得分:1)
您可能不想在第一行代码中取消引用a
。
还请记住§3.10/ 10关于别名的说法:
如果程序尝试通过以下方式访问对象的存储值 除以下类型之一之外的glvalue行为是 未定义:
对象的动态类型,
对象的动态类型的cv限定版本,
类似于对象的动态类型的类型(定义见4.4)
一种类型,它是与对象的动态类型相对应的有符号或无符号类型,
一种类型,它是与对象的动态类型的cv限定版本相对应的有符号或无符号类型,一种聚合或联合类型,其元素或非静态数据成员(包括递归)中包括上述类型之一,子集合或包含的并集的元素或非静态数据成员)
一种类型,它是对象动态类型的(可能是cv限定的)基类类型,
字符或无符号字符类型。
std::byte
是使用C ++ 17添加到该列表的。