分段故障字符数组

时间:2016-01-04 04:45:02

标签: c++ arrays segmentation-fault

我试图将一个简单的TicTacToe游戏编写为C ++编程手册中的一种练习。这应该在不使用指针或向量的情况下完成,因为我只完成了数组章节。我尝试运行代码时遇到分段错误。这是我的代码..

#include <iostream>
#include <string>
#include <math.h>

using namespace std;

void displayArray( char array[3][3] );



main ()
{
    char board[][3] =
    {
        {' ',' ',' '},
        {' ',' ',' '},
        {' ',' ',' '}
    };



    int p1;
    int p2;
    int j2;
    int j1;
    int i2;
    int i1;

    for ( int i = 0; i < 9; i++)
    {
        if( pow(-1,i) == 1 )
        {
            while ( board[i1][j1] != ' ')
            {
                cout << "Player 1 insert your indices\n";
                cin >> p1 ;
                 i1 = floor(p1%10);
                 j1 = p1%10;
            }
            board[i1][j1] = 'X';

        }
        else
        {
            while ( board[i1][j1] != ' ')
            {
                cout << "Player 2 insert your indices\n";
                cin >> p2 ;
                  i2 = floor(p2%10);
                  j2 = p2%10;
            }
            board[i1][j1] = 'O';
         }
    }
    displayArray( board );

}


void displayArray( char array[3][3] )
{
    cout << "Board :\n" ;
    for ( int i = 0; i < 3; i++ )
    {
        cout << array[i][0] << '\t' << array[i][2] << '\t' << array[i]   [2] << '\n';
    }
    cout << '\n' ;

}

1 个答案:

答案 0 :(得分:0)

   while ( board[i1][j1] != ' ')

i1j1未初始化。因此,当您执行board[i1][j1]时,您可能会触及未知领域。这在c ++中称为Undefined behavior,如果您的代码执行此操作,运行时可以随意执行任何操作。对于大多数情况,它是一个分段错误。

这一部分:

while ( board[i1][j1] != ' ')
   {
        cout << "Player 2 insert your indices\n";
        cin >> p2 ;
        i2 = floor(p2%10);
        j2 = p2%10;
   }

是一个无限循环。你的意思是写i2j2吗?