C++ 数组在for循环后丢失数据

C++ 数组在for循环后丢失数据,c++,arrays,data-loss,C++,Arrays,Data Loss,我有以下代码: cin >> r >> c; char map[c][r]; for(int i = 0; i < r; i++) { string line; cin >> line; for (int j = 0; j < c; ++j) { map[j][i] = line[j]; } } int n; cin >> n; //cout << "first " <

我有以下代码:

cin >> r >> c;
char map[c][r];
for(int i = 0; i < r; i++)
{
    string line;
    cin >> line;
    for (int j = 0; j < c; ++j) {
        map[j][i] = line[j];
    }
}


int n;
cin >> n;
//cout << "first " << endl << map[0][0] << endl<< map[1][0] << endl<< map[2][0] << endl<< map[3][0] << endl;

pair<pair<int, int>, pair<int,int>> queries[n];
for (int k = 0; k < n; ++k) {
    int r1, c1, r2, c2;
    cin >> r1 >> c1 >> r2 >> c2;
    queries[n] = make_pair(make_pair(r1-1, c1-1), make_pair(r2-1, c2-1));
}
cout << "test" << endl;
cin>>r>>c;
字符映射[c][r];
对于(int i=0;i>线路;
对于(int j=0;j>n;
//问题一:

cin >> r >> c;
char map[c][r];
后来:

pair<pair<int, int>, pair<int,int>> queries[n];
问题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));
成对查询[n];//更好地使用std::vector
对于(int k=0;k

最后一个可能会破坏
map
数组。越界访问很可能与
map

的某些元素位于同一内存位置。不知道,但您知道
char-map[c][r]在C++中,C++的数组边界必须是编译时常数。尝试使用向量代替.<代码>…查询[n];是出于同样的原因。显然,你使用名字空间STD;<代码> > <代码> >但是你也使用<代码> map < /C>作为变量名。这是“有趣的事情”。当
std::map
进入游戏时等待发生。无论如何,如果你能把它变成一个(读:我们可以把它扔进,或类似的东西,然后编译),我们可能会进一步帮助你。另外,
行[j]
上没有检查越界访问,但这些都不能解释你看到的问题。这应该是
查询[k]
而不是
查询[n]
?(我真的不知道你想做什么,所以我不能说这是错的)。我不敢相信我错过了。
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';
    }
}
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));