Проблема первая:
cin >> r >> c;
char map[c][r];
И позже:
pair<pair<int, int>, pair<int,int>> queries[n];
Это массивы переменной длины (VLA), которые являются функцией C, а не C ++.VLA не являются частью языка C ++, хотя многие компиляторы поддерживают это расширение.Вместо этого вы можете использовать std::vector<std::vector<char>>
для эмуляции поведения.
Проблема вторая:
for(int i = 0; i < r; i++)
{
string line;
cin >> line;
for (int j = 0; j < c; ++j) {
map[j][i] = line[j];
}
}
Это неопределенное поведение, поскольку длина строки чтения может быть меньше, чем c, нокод обращается к c
элементам независимо от line.length()
.Это должно быть:
for(int i = 0; i < r; i++)
{
string line;
cin >> line;
for (int j = 0; j < c; ++j) {
map[j][i] = j < line.length() ? line[j] : '\0';
}
}
Проблема 3:
Еще одно неопределенное поведение
pair<pair<int, int>, pair<int,int>> queries[n]; // better use std::vector
for (int k = 0; k < n; ++k) {
...
// Out of bounds queries[n]
queries[n] = make_pair(make_pair(r1-1, c1-1), make_pair(r2-1, c2-1));
Последнее, вероятно, уничтожает ваш массив map
.Скорее всего, доступ за пределами области находится в той же области памяти, что и некоторые элементы map
.