Тема: Помилка "Читання пам'яті неможливо"
Доброго вечора! Вирішив написати прості консольні Хрестики-нулики, зіткнувся з проблемою.
▼вибиває ось цю помилку
Помилка виникає, коли я намагаюся зациклити функцію, дописавши в кінці - bot();
▼Ця функція
void bot() {
int arr02[] = { 8,10,12,22,24,26,36,38,40 }; // Числа в масиві - це індекси чисел 1,2,3,4,5,6,7,8,9 в масиві arr[]
srand((unsigned)time(NULL));
int index = rand() % 9; // випадкове число
if (arr[arr02[index]] != 'X' && 'O') {
arr[arr02[index]] = 'O';
}
else {
bot();
}
}
Суть в тому, що бот виставляє "нулики" в випадкову клітинку.
Я роблю, спочатку перевірку, чи клітинка не занята вже "нулем" або "хрестиком", якщо так: то функція повинна виконуватися заново, якщо ні: то в клітинку ставиться нулик .
▼Весь код програми
#include <iostream>
#include<locale.h>
#include <time.h>
using namespace std;
// Масив дошки
char arr[] ={
'-','-','-','-','-','-','-',
'|','1','|','2','|','3','|',
'-','-','-','-','-','-','-',
'|','4','|','5','|','6','|',
'-','-','-','-','-','-','-',
'|','7','|','8','|','9','|',
'-','-','-','-','-','-','-',
};
// Прототипи функцій
void vubir();
void doska();
void bot();
// Виклики всіх функцій
void main() {
setlocale(LC_ALL, "RUS");
doska();
cout << "Ви граэте за хрестики. Нажмiть: 1,2,3,4,5,6,7,8 або 9, " << endl;
vubir();
bot();
doska();
//canInput();
cout << "Нажмiть: 1,2,3,4,5,6,7,8 або 9, " << endl;
vubir();
bot();
doska();
//canInput();
cout << "Нажмiть: 1,2,3,4,5,6,7,8 або 9, " << endl;
vubir();
bot();
doska();
//canInput();
cout << "Нажмiть: 1,2,3,4,5,6,7,8 або 9, " << endl;
vubir();
bot();
doska();
//canInput();
cout << "Нажмiть: 1,2,3,4,5,6,7,8 або 9, " << endl;
vubir();
bot();
doska();
//canInput();
cout << "Нажмiть: 1,2,3,4,5,6,7,8 або 9, " << endl;
system("pause");
}
// Малюємо дошку.
void doska() {
for (int a = 0;a < 7;a++)
cout << arr[a];
cout << endl;
for (int a = 7;a < 14;a++)
cout << arr[a];
cout << endl;
for (int a = 14; a<21; a++)
cout << arr[a];
cout << endl;
for (int a = 21;a<28;a++)
cout << arr[a];
cout << endl;
for (int a = 28; a<35; a++)
cout << arr[a];
cout << endl;
for (int a = 35;a<42;a++)
cout << arr[a];
cout << endl;
for (int a = 42;a<49;a++)
cout << arr[a];
cout << endl;
}
// Бот - противник.
void bot() {
int arr02[] = { 8,10,12,22,24,26,36,38,40 }; // Числа в масиві - це індекси чисел 1,2,3,4,5,6,7,8,9 в масиві arr[]
srand((unsigned)time(NULL));
int index = rand() % 9; // випадкове число
if (arr[arr02[index]] != 'X' && 'O') {
arr[arr02[index]] = 'O';
}
else {
bot();
}
}
// Вибір гравцем де поставити хрестик.
void vubir() {
int step;
cin >> step;
switch (step) {
case 1:
arr[8] = char('X');
doska();
break;
case 2:
arr[10] = char('X');
doska();
break;
case 3:
arr[12] = char('X');
doska();
break;
case 4:
arr[22] = char('X');
doska();
break;
case 5:
arr[24] = char('X');
doska();
break;
case 6:
arr[26] = char('X');
doska();
break;
case 7:
arr[36] = char('X');
doska();
break;
case 8:
arr[38] = char('X');
doska();
break;
case 9:
arr[40] = char('X');
doska();
break;
}
}