@CodeDes3D

Почему происходит выход за пределы массива?

Здравствуйте. В C++ я начинающий, поэтому испытываю сложности с его строгой типизацией. Пробую пользоваться очередями. Передаю из очереди в массив значения, но почему-то появляется неотловленное исключение, которое обычно у меня при выходе за пределы массива. Приведу укороченный код с методом (там отмечена проблемная область):
class KittyClass {
public:
	int coord[9][2];
	int x, a, b, w, num;
	std::queue<int> queue;
	KittyClass() {
		x = 0;  
		num = 1;
	}
	bool goKittiesBFS(std::string arr[6][6]) {
		int y = 1, num = 1, g = 0;
		string cats[2];
		string myArrStr;
		string myCompStr;
		string s;
		for (int i = 0; i < 9; i++)
		{
			for (int g = 0; g < 6; g++)
			{
				for (int b = 0; b < 6; b++)
				{
					//strcpy_s(arrStr, arr[w][b].c_str());
					myArrStr = arr[g][b].c_str();
					myCompStr = "k" + std::to_string(num);					
					//strcpy_s(compStrPart, s.c_str());
					//strcat_s(compStr,compStrPart);
					std::cout << myArrStr << " : " << myCompStr << std::endl;
					if (myArrStr == myCompStr)
					{
						queue.push(g);
						queue.push(b);
					}	
										
				}
			}
			(b >= 6) ? b = 0 : b;
			(g >= 6) ? g = 0 : g;
			num++;			
		}
		
		// ----------------
		// Тут происходит выход за пределы:
		for (int i = 0; i < 9; i++)
		{
			// cats[9][2]  // queue имеет 18 чисел
			cats[i][0] = queue.front();
			queue.pop();
			cats[i][1] = queue.front();
			queue.pop();
		}
		return true;
	}
}
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
У вас в пределах одного класса 3 раза создается переменная g, 2 раза b. За такой стиль именования Артемий Лебедев бы сказал "Вон из профессии"
Ответ написан
Nipheris
@Nipheris Куратор тега C++
// cats[9][2] // queue имеет 18 чисел

у вас cats это массив из двух string-ов, но вы его индексируете от 0 до 8:
cats[i][0]

вы точно понимаете, что пишете? не вижу, чем бы вам тут мешала строгая типизация, на js это было бы также непонятно что
Ответ написан
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
//массив 2 строки
string cats[2];
...
    for (int i = 0; i < 9; i++)
    {
//Перепутан порядок индексов. Первый индекс это номер строки в массиве, второй номер символа в строке. 
//И вы должны быть точно уверены что в строках будет не менее 9 символов.
      cats[i][0] = queue.front(); // <--- должно быть cat[0][i]
      queue.pop();
      cats[i][1] = queue.front(); // <--- должно быть cat[1][i]
      queue.pop();
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы