2013-07-02 55 views
0

我想在DirectX的時刻寫OBJMesh裝載機和我碰到一個問題就用我的代碼段:C++索引超出範圍未發生時,它應該

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

中的vertexDatastd::copyvector<VERTEX>,我試圖將vertexData中的數據複製到我新創建的頂點數組中。

當我加載我的objmesh文件時,我檢查了有2841個頂點是正確的,我將它存儲到vertexCount(我通過執行std::cout << vertexCount檢查了它)。

然而,真正的問題是,當我通過輸入std::cout << vertices[3000].x檢查陣列的數據和大小它打印出的東西而不觸發索引出界錯誤。

知道我已經創建了大小爲2841的頂點數組,編譯器應該停止並顯示錯誤嗎?究竟是什麼問題,爲什麼它的行爲如此?

請幫

編輯: 使用Visual Studio 2010 64位Windows 7

+0

哪個編譯器?哪個操作系統?許多編譯器都有一些方法來啓用「checked」迭代器和索引函數。 – bennofs

+0

該標準的哪個部分支持您聲稱您的程序會崩潰並顯示錯誤? – chris

+1

此處出現越界訪問*未定義行爲*。 – juanchopanza

回答

1

vertices[3000].x行爲是undefined。編譯器/運行時沒有義務提供任何診斷。

0

在C++中訪問超出數組末尾的元素是未定義的行爲。這基本上意味着任何事情都可能發生,並且你不應該期待任何特定的結果或錯誤。

0

你做什麼會導致未定義的行爲。任何事情都可能發生,你絕對不能指望出界異常。只有在使用std::vector和使用.at()而不是[]訪問的元素時,才能真實地獲取它。