C ++索引超出范围时不应该发生

时间:2013-07-02 18:55:33

标签: c++ arrays vector copy

我正在尝试在DirectX中编写一个OBJMesh加载器,我遇到了一段代码中的问题:

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

vertexData中的std::copyvector<VERTEX>,我正在尝试将vertexData中的数据复制到我新创建的顶点数组中。

当我加载我的objmesh文件时,我检查了有2841个顶点是正确的,我已将它存储到vertexCount(我通过执行std::cout << vertexCount检查了它。)

然而,真正的问题是,当我通过输入std::cout << vertices[3000].x来检查数组的数据和大小时,它会打印出一些内容而不会触发索引超出绑定错误。

知道我已经创建了大小为2841的顶点数组,如果没有,编译器应该停止并显示错误?究竟是什么问题,为什么它会像这样?

请帮忙

修改 使用Visual Studio 2010 Windows 7 64位

3 个答案:

答案 0 :(得分:1)

vertices[3000].x的行为是undefined。编译器/运行时没有义务提供任何诊断。

答案 1 :(得分:0)

在C ++中访问数组末尾之外的元素是未定义的行为。这基本上意味着任何事情都可能发生,你不应该期待任何特定的结果或错误。

答案 2 :(得分:0)

你做的是导致未定义的行为。任何事情都可能发生,你绝对不能指望出界的例外。只有使用std::vector并使用.at()而不是[]来访问元素,才能真实地获得。