C++索引超出范围而不是在应该出现的时候出现

C++ index out of range NOT occurring when it should

本文关键字:候出现 索引 范围 C++      更新时间:2023-10-16

我现在正试图在DirectX中编写一个OBJMesh加载程序,但我遇到了一段代码的问题:

unsigned int vertexCount = vertexData.size();
VERTEX* vertices = new VERTEX[vertexCount];
std::copy(vertexData.begin(), vertexData.end(), vertices);

std::copy中的vertexDatavector<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()而不是[]访问元素,才能实际获得。