2012-10-21 27 views
0

我是新的C++,但我很清楚C#,Java。但是不要緊。我想創建跳棋遊戲模擬。我編輯了窗口加載的新事件。這是我所做過來源:C++數組和窗口退出

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { 
      int matr[7][7]; 
      int i, j; 
      int prevBlack = 1; 
      int prevRow = 0; 
      int current = 0; 

      for (i = 0; i < 8; i++) 
      { 
       if ((i + 1) % 2 == 0) 
       { 
        prevBlack = 0; 
       } 
       else 
       { 
        prevBlack = 1; 
       } 

       for (j = 0; j < 8; j++) 
       { 
        if (prevBlack == 1) 
        { 
         current = 0; 
        } 
        else if (i == 0 || i == 1 || i == 2) 
        { 
          current = 2; 
        } 
        else 
        { 
         current = 1; 
        } 

        matr[i][j] = (int)current; 

        if (current == 1 || current == 2) 
        { 
         prevBlack = 1; 
        } 
        else 
        { 
         prevBlack = 0; 
        } 
       } 

       prevRow = i; 
      } 
     } 

問題是matr[i][j] = (int)current;在代碼我的程序退出這部分的結束。當這部分代碼被評論時,窗口將被顯示。

我不知道它爲什麼如此。數組是8 x 8.我需要你的幫助:)

回答

3

當你聲明你的數組爲matr[7][7]時,它的大小爲7x7,有效索引爲0..6。但是您正在訪問索引爲0..7的數組,這會導致錯誤。因爲你需要一個8x8數組,所以你應該聲明數組爲matr[8][8]

+0

並且只是爲了添加......因爲您正在寫入數組的末尾,所以您可能會覆蓋堆棧中的返回地址,因此當函數嘗試返回給調用者時,程序將向南移動。 – cbranch

+0

哦,非常感謝!這是非常有用的信息! – Mirgorod