2013-03-10 84 views
-4

嗨我最近與DirectX9合作,我遇到了這個錯誤。儘管它與DirectX無關。這是我的。與陣列運行時錯誤

struct D3DVertex 
{ 
    float x, y, z; 
    DWORD Color; 
}; 


int main() 
{ 
    D3DVertex *TestShape = new D3DVertex(); 

     TestShape[0].x = 0.0f; 
     TestShape[0].y = 2.0f; 
     TestShape[0].z = 0.5f; 
     TestShape[0].Color = 0xffffffff; 

     TestShape[1].x = -2.0f; 
     TestShape[1].y = -2.0f; 
     TestShape[1].z = 0.5f; 
     TestShape[1].Color = 0xffffffff; 

     TestShape[2].x = 2.0f; 
     TestShape[2].y = -2.0f; 
     TestShape[2].z = 0.5f; 
     TestShape[2].Color = 0xffffffff; 

return 0; 
} 

當我運行它時,它給我一個運行時錯誤,說這個。

Windows has triggered a breakpoint in x.exe. 

This may be due to a corruption of the heap, which indicates a bug in x.exe or any of the DLLs it has loaded. 

This may also be due to the user pressing F12 while x.exe has focus. 

The output window may have more diagnostic information. 

但是當我走這條線走TestShape[2].z = 0.5f;錯誤消失。 爲什麼會發生這種情況,我該如何解決這個問題。請幫忙。

+1

您創建了一個對象並像數組一樣訪問。那是問題所在。使用它來創建對象的數組(大小3)D3DVertex * TestShape = new D3DVertex [3]; – 999k 2013-03-10 12:41:11

+0

我該如何解決這個問題? – Efex 2013-03-10 12:41:42

回答

4

你在內存中創建一個對象:

D3DVertex *TestShape = new D3DVertex(); 

,然後你訪問它,就像是一個數組

TestShape[x] ... 

這是什麼問題,你不有一個數組。你有一個單一的對象。

創建一個數組:

D3DVertex *TestShape = new D3DVertex[3]; 

現在你有D3DVertex型的3個對象。

要記住的重要一點是指針不是數組。當你將一個指針作爲參數傳遞給一個函數時,只有當數組有衰減時,你纔會得到一個指針。然後你得到一個指向數組中第一個元素的指針。

更好的是,使用std::vector<D3DVertex> TestShape;而不用擔心處理指針。

D3DVertex foo; //create object. 

TestShape.push_back(foo); //add it to your vector. 

可以使用operator[]爲未選中訪問或at(index)爲邊界訪問您的矢量檢查接入

D3DVertex f = TestShape[0]; //Get element zero from TestShape. 

如果你想通過矢量,看看每一個元素:

for (std::vector<D3DVector>::iterator it = TestShape.begin(); it != TestShape.end(); ++it) // loop through all elements of TestShape. 
{ 
    D3DVector vec = *it; //contents of iterator are accessed by dereferencing it 
    (*it).f = 0; //assign to contents of element in vector. 
} 
+0

好吧,我開始明白,但是如果我創建了一個矢量,我怎樣才能從矢量中只取出數組? – Efex 2013-03-10 12:45:26

+0

@Efex我編輯了我的答案 – 2013-03-10 12:46:50

+0

好的,告訴我如何從矢量中獲取元素,但是如果我想從矢量中返回整個數組,則該怎麼辦?就像我在一個數組中有超過1000個元素一樣,我不知道我有多少(我知道你怎麼能找到)。 – Efex 2013-03-10 12:56:33