C++索引超出范围而不是在应该出现的时候出现
C++ index out of range NOT occurring when it should
我现在正试图在DirectX中编写一个OBJMesh加载程序,但我遇到了一段代码的问题:
unsigned int vertexCount = vertexData.size();
VERTEX* vertices = new VERTEX[vertexCount];
std::copy(vertexData.begin(), vertexData.end(), vertices);
std::copy
中的vertexData
是vector<VERTEX>
,我正试图将vertex data中的数据复制到我新创建的顶点数组中。
当我加载到objmesh文件中时,我已经检查了2841个正确的顶点,并将其存储到vertexCount中(我通过执行std::cout << vertexCount
检查了它)。
然而,真正的问题是,当我通过输入std::cout << vertices[3000].x
检查数组的数据和大小时,它会打印出一些内容,而不会触发索引越界错误。
知道我已经创建了2841大小的顶点数组,编译器应该停止并显示错误,不是吗?到底是什么问题,为什么会这样??
请帮助
编辑:使用Visual Studio 2010Windows 7 64位
vertices[3000].x
的行为未定义。编译器/运行时没有义务提供任何诊断。
在C++中访问数组末尾以外的元素是未定义的行为。这基本上意味着任何事情都可能发生,并且您不应该期望任何特定的结果或错误。
您所做的操作会导致未定义的行为。任何事情都有可能发生,您绝对不能期望出现越界异常。只有使用std::vector
并使用.at()而不是[]访问元素,才能实际获得。
相关文章:
- 查找字符在两个索引之间出现的次数
- 访问特定阵列位置/索引时出现分段错误
- 如何找到数组中值倒数第二次出现的索引
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 如何使用二叉搜索返回姓氏(给定字符串)的第一个索引/出现次数?
- 为什么在使用字符索引数组时会出现这种不同的行为
- 使用二叉搜索查找数字的第 N 次出现的索引
- 将 [] 索引到无序映射时出现段错误
- 为什么在 std::vector 中使用索引超出范围的运算符 [] 时没有出现异常?
- 使用boost::引用元组作为orderedunique索引的关键字时出现boost多索引插入错误
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 使用索引缓冲区对象时出现奇怪的分段错误
- C++:字符串索引和保留标点符号时出现问题
- 字符串的第 n 次出现的索引
- 加载.dae文件时出现问题,索引和顶点加载正确
- 如何在首次出现最大值的排序数组中查找索引
- C++索引超出范围而不是在应该出现的时候出现
- 使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误
- 试图通过指针索引对象数组的数组时出现分段错误
- 返回常量字符数组中字符最后出现的索引