故障字符阵列的分割 我试图从C++编程书籍中编写一个简单的TigToToTi游戏代码。这应该在不使用指针或向量的情况下完成,因为我只完成了数组一章。当我试图运行代码时,我遇到了一个分段错误。这是我的密码 #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' ; }

故障字符阵列的分割 我试图从C++编程书籍中编写一个简单的TigToToTi游戏代码。这应该在不使用指针或向量的情况下完成,因为我只完成了数组一章。当我试图运行代码时,我遇到了一个分段错误。这是我的密码 #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' ; },c++,arrays,segmentation-fault,C++,Arrays,Segmentation Fault,i1和j1一开始未初始化。因此,当你登上[i1][j1]的时候,你就有可能触及未知领域。这被称为C++中的未定义行为,而运行时可以自由地执行任何它想要的代码。在大多数情况下,这是一个分割错误 本部分还包括: while ( board[i1][j1] != ' ') { cout << "Player 2 insert your indices\n"; cin >> p2 ; i2 = floor(p2%10);

i1和j1一开始未初始化。因此,当你登上[i1][j1]的时候,你就有可能触及未知领域。这被称为C++中的未定义行为,而运行时可以自由地执行任何它想要的代码。在大多数情况下,这是一个分割错误

本部分还包括:

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

是一个无限循环。你是不是想写i2和j2

运行代码时会发生什么?潜在的异常是什么?在哪一行?使用调试器并逐步检查代码,找出问题所在。当我运行代码时,它只是说分段错误。编译时不会出现错误或警告。对其他人提到的单位化变量进行排序后,p1%10会给出0-9之间的值,但您有一个2D 3x3数组,因此3或更多的p1可能不在数据中。i1和i2在首次用作数组索引之前不会进行初始化。这是未定义的行为。它们不是以零值开始的。初学者的错误。问题解决了。非常感谢您的快速回复,我开始喜欢这个社区了:是的,我忘记了while循环的更改变量太多复制粘贴:@chağlarSamaner如果答案解决了您的问题,您通常会接受它。对不起,请帮忙
while ( board[i1][j1] != ' ')
   {
        cout << "Player 2 insert your indices\n";
        cin >> p2 ;
        i2 = floor(p2%10);
        j2 = p2%10;
   }