C ++在内存地址获取指针的值-分段错误

时间:2018-07-22 22:00:33

标签: c++ pointers memory

我有以下代码行: (其中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

问题是我在指示的行上不断出现分段错误。 我认为这可能与指针算法有关,但我不确定。有谁知道我为什么会在这里出现段错误?

1 个答案:

答案 0 :(得分:1)

您可能不想在第一行代码中取消引用a

还请记住§3.10/ 10关于别名的说法:

  

如果程序尝试通过以下方式访问对象的存储值   除以下类型之一之外的glvalue行为是   未定义:

     

对象的动态类型,

     

对象的动态类型的cv限定版本,

     

类似于对象的动态类型的类型(定义见4.4)

     

一种类型,它是与对象的动态类型相对应的有符号或无符号类型,

     

一种类型,它是与对象的动态类型的cv限定版本相对应的有符号或无符号类型,一种聚合或联合类型,其元素或非静态数据成员(包括递归)中包括上述类型之一,子集合或包含的并集的元素或非静态数据成员)

     

一种类型,它是对象动态类型的(可能是cv限定的)基类类型,

     

字符或无符号字符类型。

std::byte是使用C ++ 17添加到该列表的。