2013-11-01 53 views
1

我有這兩種方法叫做一個又一個;變量不明原因變化

m_Fence.Initialise(7); 
m_Fence.CreateSquareFence();  

下面是他們的每個細節;

void CFence::Initialise(int size) 
{ 
    m_square_size = size; 
} 

void CFence::CreateSquareFence() 
{ 
    int l_Vector_Pos = 0; 

    //Set initial vector at origin and start of first fence 
    CVector3f l_Fence_Position = CVector3f(0.0f,0.0f,0.0f); 

    int l_side = 0; // Makes sure only 4 sides get created 
    std::string bools[4] = {"plus_z", "plus_x", "minus_z", "minus_x"}; 
     //Draw 1st fence on 0 x-axis 
     while(l_side < 4) 
      { 
       for(int i=0 ; i<=m_square_size ; i++) 
        {     
        //Find which direction it's going and set Fence position and add to vector 
        if(bools[l_side] == "plus_z" && i>0) 
         l_Fence_Position += CVector3f(0.0,0.0,beamLength); 
        else if(bools[l_side] == "plus_x" && i>0) 
         l_Fence_Position += CVector3f(beamLength,0.0,0.0); 
        else if(bools[l_side] == "minus_z" && i>0) 
         l_Fence_Position += CVector3f(0.0,0.0,-beamLength); 
        else if(bools[l_side] == "minus_x" && i>0) 
         l_Fence_Position += CVector3f(-beamLength,0.0,0.0); 

        fences[l_Vector_Pos].setPosition(l_Fence_Position); 
        l_Vector_Pos++; 

        //Increase this int to let it know what side we're creating 
        if(i == m_square_size) 
         { 
          l_side++; 
        } 
       } 
      } 
} 

我通過7到和它最初改變m_square_size變量7,但是當我調用CreateSquareFence方法它最終成爲0,我掙扎明白。

+1

設置一個內存斷點。 –

+0

你可以將'm_square_size'封裝在getter方法中。 –

+1

「柵欄」是如何定義初始化的?你有可能在這裏超越數組嗎? – Angew

回答

1

談到我的意見爲答案

確保fences是足夠大,你沒有達到出界和王牌鄰近mnemory的(更普遍,調用未定義行爲)。


在旁註中,該代碼看起來太複雜。你可以這樣簡化:

void CFence::CreateSquareFence() 
{ 
    int l_Vector_Pos = 0; 

    //Set initial vector at origin and start of first fence 
    CVector3f l_Fence_Position = CVector3f(0.0f, 0.0f, 0.0f); 

    CVector3f offsets[4] = { 
    CVector3f(0.0, 0.0, beamLength), 
    CVector3f(beamLength, 0.0, 0.0), 
    CVector3f(0.0, 0.0, -beamLength), 
    CVector3f(-beamLength, 0.0, 0.0) 
    }; 
    for (int l_side = 0; l_side < 4; ++l_side) { 
    for (int i = 0; i <= m_square_size; ++i) { 
     if (i>0) 
     l_Fence_Position += offsets[l_side]; 
     fences[l_Vector_Pos].setPosition(l_Fence_Position); 
     ++l_Vector_Pos; 
    } 
    } 
} 
+0

不錯,謝謝你的收拾! – r0bb077