vector 的 C++ 读取访问冲突

标签 c++ visual-studio exception access-violation

当我尝试使用 vector[int_number] 并且我的程序停止工作时出现异常。

            uint64_t data = 0xffeeddccbbaa5577;
            uint16_t *vector = (uint16_t*) data;

            int currentPosition = 0;

            while (currentPosition <= 3) {

            uint16_t header = vector[currentPosition]; // problem here

Visual Studio 2017 返回给我:抛出未处理的异常:读取访问冲突。 vector 是 0x6111F12。

我卡在这里了。如果您知道我应该做什么,我将不胜感激。提前致谢!

最佳答案

撇开由于严格别名违规而导致的所有未定义行为,在当前的英特尔芯片和 MSVC 运行时中,所有指针都是 48 位。

所以 0xffeeddccbbaa5577 绝不 是一个有效的指针值。

因此取消引用该值的行为将是未定义的。

如果您想将 data 分解为适当类型的四个元素,那么一种方法是创建一个 uint16_t foo[4] say 和 memcpy&data开始的数据到foo

关于 vector 的 C++ 读取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54435786/

相关文章:

c++ - 为什么要给小类成员返回一个 const 引用?

c++ - Visual Studio 2010 c++ 项目的 Poco 和 openssl 链接器错误

c++ - 检查并行化 BLAS 例程的结果

visual-studio - 如何使用Visual Studio进行自动构建?

java - fatal error VS 异常

c++ - 是否可以编写一个函数模板来返回参数的数量是否可以被 N 整除?

c++ - 创建雨滴

c++ - 快板 5 : Check if Joystick is "neutral"

Java:异常

c++如何处理抛出异常的初始化程序