我正在尝试在DirectX中编写一个OBJMesh加载器,我遇到了一段代码中的问题:
unsigned int vertexCount = vertexData.size();
VERTEX* vertices = new VERTEX[vertexCount];
std::copy(vertexData.begin(), vertexData.end(), vertices);
vertexData
中的std::copy
是vector<VERTEX>
,我正在尝试将vertexData中的数据复制到我新创建的顶点数组中。
当我加载我的objmesh文件时,我检查了有2841个顶点是正确的,我已将它存储到vertexCount(我通过执行std::cout << vertexCount
检查了它。)
然而,真正的问题是,当我通过输入std::cout << vertices[3000].x
来检查数组的数据和大小时,它会打印出一些内容而不会触发索引超出绑定错误。
知道我已经创建了大小为2841的顶点数组,如果没有,编译器应该停止并显示错误?究竟是什么问题,为什么它会像这样?
请帮忙
修改 使用Visual Studio 2010 Windows 7 64位
答案 0 :(得分:1)
vertices[3000].x
的行为是undefined。编译器/运行时没有义务提供任何诊断。
答案 1 :(得分:0)
在C ++中访问数组末尾之外的元素是未定义的行为。这基本上意味着任何事情都可能发生,你不应该期待任何特定的结果或错误。
答案 2 :(得分:0)
你做的是导致未定义的行为。任何事情都可能发生,你绝对不能指望出界的例外。只有使用std::vector
并使用.at()而不是[]来访问元素,才能真实地获得。