2016-11-29 10 views
-1

次のコードで次のエラーを修正する方法はありますか?これはXcodeのC++環境にあります。デバッグECX_BAD_ACCESSエラーC++

// 
// main.cpp 
// Chess 
// 
// Created by Akshar Ramkumar on 9/29/16. 
// Copyright © 2016 Akshar Ramkumar. All rights reserved. 
// 

#include "Declarations.hpp" 
#include "DeclarationsMain.hpp" 
extern simplePiece TotalBoard[8][8]; 
using namespace std; 
int main() { 




    Piece All[32]; 
    start(All); 
    char rawinput[4]; 
    char fxinput; 
    char fyinput; 
    char txinput; 
    char tyinput; 
    while(true){ 
     Turn=not Turn; 
     if(Turn==true){ 
      TurnColor="white"; 

     } 


     else { 

      TurnColor="black"; 

     } 

     cout<<"It is "<<TurnColor<<"'s turn"<<endl; 
     cout<<"Enter the x and y coordinates you want to move from 0-7, 0-7 (no spaces in between)"<<endl; 
     cin>>rawinput; 
     fxinput=rawinput[0]; 
     fyinput=rawinput[2]; 
     cout<<"Enter the x and y coordinates you want to move to 0-7, 0-7 "<<endl; 
     cin>>rawinput; 
     txinput=rawinput[0]; 
     tyinput=rawinput[2]; 
     if(TotalBoard[fxinput][fyinput].Color==Turn and TotalBoard[fxinput][fyinput].Color==true){ 

      TotalBoard[txinput][tyinput]=TotalBoard[fxinput][fyinput]; 
      TotalBoard[fxinput][fyinput].Color=false; 
      TotalBoard[fxinput][fyinput].Type=0; 
      TotalBoard[fxinput][fyinput].exists=false; 






     } 



    } 


    return 0; 
} 

次へ

// 
// Classes.cpp 
// Chess 
// 
// Created by Akshar Ramkumar on 10/13/16. 
// Copyright © 2016 Akshar Ramkumar. All rights reserved. 
//Pawn = 0 
//Rook = 1 
//Knight = 2 
//Bishop = 3 
//King = 4 
//Queen = 5 

#include "Declarations.hpp" 
#include "DeclarationsBoard.hpp" 
void start(Piece All[32]){ 
    int TypeArray[32]; 
    int xValues[32]; 
    int yValues[32]; 
    std::ifstream startstate; 
    std::fstream boardstate; 
    std::string numread; 
    char delim=' '; 
    startstate.open("/Users/aksramk/Google Drive/For Fun/Programming/Pascal C++/Chess/boardstatestart.txt") 
    ; 
    boardstate.open("/Users/aksramk/Google Drive/For Fun/Programming/Pascal C++/Chess/boardstatecurrent.txt"); 
    for(int i=0;i<32;i++){ 
     getline(startstate, numread,delim); 


     TypeArray[i]=atoi(numread.c_str()); 

    } 

    for(int i=0;i<32;i++){ 
     getline(startstate, numread, delim); 


     xValues[i]=atoi(numread.c_str()); 
    } 

    for(int i=0;i<32;i++){ 
     getline(startstate, numread, delim); 


     yValues[i]=atoi(numread.c_str()); 

    } 


    for (int i=0;i<32;i++){ 


     All[i].Type = TypeArray[i]; 
     All[i].y = yValues[i]; 
     All[i].x = xValues[i]; 
     All[i].Color = true; 
     All[i].Captured = false; 


     if (i>15){ 
      All[i].Color = false; 
     } 
    } 
    startstate.close(); 
    for(int i=0;i<32;i++){ 

     boardstate<<TypeArray[i]; 
     boardstate<<" "; 

    } 
    for(int i=0;i<32;i++){ 

     boardstate<<xValues[i]; 
     boardstate<<" "; 

    } 
    for(int i=0;i<32;i++){ 

     boardstate<<yValues[i]; 
     boardstate<<" "; 

    } 

    for(int i=0;i<32;i++){ 
     boardstate<<0; 
     boardstate<<" "; 

    } 
    boardstate.close(); 
    ; 

    for(int i=0;i<8;i++){ 
     for(int j=0;j<8;j++){ 
      simplePiece temp; 

      for(int k=0;k<32;k++){ 
       Piece temp2=All[k]; 
       if(temp2.x==i and temp2.y==j){ 

        temp.Type=temp2.Type; 
        temp.Color=temp2.Color; 
        temp.exists=true; 
       } 

      } 
      TotalBoard[i][j]=temp; 

     } 
    } 


    }; 

ヘッダ:

// DeclarationsMain.h 
// Chess 
// 
// Created by Akshar Ramkumar on 11/22/16. 
// Copyright © 2016 Akshar Ramkumar. All rights reserved. 
// 

#ifndef DeclarationsMain_h 
#define DeclarationsMain_h 
bool Turn=false; 
std::string TurnColor; 

#endif /* DeclarationsMain_h */ 

次へ

// 
// DeclarationsBoard.h 
// Chess 
// 
// Created by Akshar Ramkumar on 11/22/16. 
// Copyright © 2016 Akshar Ramkumar. All rights reserved. 
// 

#ifndef board 
#define board 
simplePiece TotalBoard[8][8]; 

#endif 

次へ

// 
// DataStructures.hpp 
// Chess 
// 
// Created by Akshar Ramkumar on 10/18/16. 
// Copyright © 2016 Akshar Ramkumar. All rights reserved. 
// 


#ifndef iostream 
#define iostream 
#include <iostream> 
#include <fstream> 


#endif 

#ifndef piece 
#define piece 
class Piece { 
    public: 
     int Type; 
     int x; 
     int y; 
     bool Captured; 
     bool Color; 


}; 

struct simplePiece{ 
    bool Color=false; 
    int Type=0; 
    bool exists=false; 


}; 
void start(Piece All[32]); 
#endif 

ライン:「スレッド1:ECX_BAD_ACCESS(コード= 2、アドレス= 0x100009bac)

TotalBoard[txinput][tyinput]=TotalBoard[fxinput][fyinput]; 

はエラーをスロー。

誰でもこれを修正する方法について考えていますか?

ありがとう、と私は初心者です簡単な質問を申し訳ありません。あなたのコードから

+2

をし、 tyinputは型を 'int'に変更した後、あなた自身のバグをすべて自分で見つけ出すことはかなり確信しています。自由な手掛かり:0から7までの座標を入力すると、これらの変数に入力される実際の値は***から***になります。 –

+0

これを試しました。 TotalBoardはmain.cppのスコープに存在しないようです。 –

+0

これは、main.cppの4つの変数の値と何が関係していますか?あなたは私のコメント、または他の人のコメントを読んだことがありますか? –

答えて

3

関連部品:

char rawinput[4]; 

cin>>rawinput; 
fxinput=rawinput[0]; 
fyinput=rawinput[2]; 

ここで入力操作は、その文字列の中に「言葉」(スペースなし基本的にテキスト)を読み込みます。ユーザーが「1 2」を入力したとします。ここの最初の単語は "1"です。 rawinput配列は、 "1"のASCII値とそれに続くヌルバイトからなるC文字列を保持します。

rawinput[0]は、49

rawinput[2]で、その後の前にあったものは何でもいくつかの不確定値、です。


一つの解決策は、int変数を使用することです:あなたはあなたのコードを一行ずつステップ、およびfxinputのどのような値を調べ、fyinputするためにデバッガを使用する場合は、txinputを

int x; 
int y; 

cin >> x >> y; 
+0

これをどのように修正する必要がありますか? –

+2

これは、C++の本を読むことで解決する必要があります。 –

+0

これを修正しました。同じエラーが存在します。 –