2013-07-08 76 views
-2

我正在處理if語句中的數據,並且希望將該數據保留爲非本地變量,因此我可以在語句外調用它。這是實際的代碼。謹防;它幾乎只是一個想法的遺棄,但我會歡迎任何和所有想法或更好的解決方案(提供的建議對我目前的水平來說不是太先進)...從if語句返回數據

代碼創建和多維char數組(2維),並填充它。之後嘗試調用它時,程序因達到未分配的數組值而崩潰。

 do 
     { 
     destRow = (rand() % ROWS) + 1; // assigning random placement for destroyer ship 
     destCol = (rand() % COLLUMS) + 1; 
     destDir = (rand() % 2) + 1; 

     if (destDir == 1) { //Destroyer: 1 = right 
      if (destCol + 1 > COLLUMS) { 
       continue; 
      } else { 
       char enemyDestroyer[DESTROYER_SIZE][2] = { { board[destCol][0] , board[0][destRow] }, { board[destCol + 1][0] , board[0][destRow] } }; 
      } 

     } else if (destDir == 2) { //Destroyer: 2 = down 
      if (destRow + 1 > ROWS) { 
       continue; 
      } else { 
       char enemyDestroyer[DESTROYER_SIZE][2] = { { board[destCol][0] , board[0][destRow] }, { board[destCol][0] , board[0][destRow + 1] } }; 
      } 
     } 
     destSucces = true; 
    } while (!destSucces); 

這會檢查玩家輸入(在其他一些點聚集)的數據,上面的設置,這實際上並沒有設置任何東西,因爲分配的if語句

if ((input[0] == enemyDestroyer[0][0] && input[1] == enemyDestroyer[0][1]) || (input[0] == enemyDestroyer[1][0] && input[1] == enemyDestroyer[1][1])) { 
    cout << "Hit!" << endl; 
    board[posY][posX] = '!'; 
    getchar(); 

    //setting display damage 
    if (input[1] == enemyDestroyer[0][1]) { 
     enmDesDisp[0] = '!'; 
    } else if (input[1] == enemyDestroyer[1][1]) { 
     enmDesDisp[1] = '!'; 
    } 
} else { 
    cout << endl << "Splash!" << endl; 
} 
happend
+2

請用您正在使用的語言標記您的問題。 – Blorgbeard

+0

ofc,sry回合 –

回答

2

您不清楚您正在引用哪個數組。在代碼中與您交互的唯一陣列是enemyDestroyer,它在分配後立即從內存中釋放。

也許你可以擴展你的例子,這樣我們可以更好地理解你想要做什麼?

更新

爲了防止enemyDestroyer被瞬間釋放你幾乎必須將它移動到合適的範圍。這意味着將它用於將要使用的範圍內。

我建議閱讀範圍,也許切換到面向對象的設計。

+0

那麼......如果你添加「cout << enemyDestroyer [0] [0];」在循環之後,這幾乎就是.__。 –

+0

問題是,我不希望它從內存中釋放,我希望它以及在if語句中賦予它的值在整個程序的其餘部分都可用。 –