【发布时间】:2019-03-20 08:16:46
【问题描述】:
我有以下代码:
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;
我遇到了一个非常奇怪的问题,在第二个 for 循环之后,我的地图数组似乎丢失了所有数据。我在“int n;”行上有断点和 "cout
在第一个断点上,我的 char 数组填充了我期望的值,但是在第二个断点上,char 数组中的所有值都是 '\000'。
这可能是什么原因造成的?
【问题讨论】:
-
不知道,但你意识到
char map[c][r];不是合法的C++?在 C++ 中,数组边界必须是编译时常量。尝试改用向量。... queries[n];出于同样的原因是非法的。 -
你显然在做
using namespace std;,但你也使用map作为变量名。当std::map进入游戏时,这就是等待发生的“有趣的事情”。无论如何,如果你能把它变成minimal reproducible example(阅读:我们可以把它扔进godbolt.org、wandbox.org或类似的东西并编译)我们可能会进一步帮助你。 -
另外,
line[j]上没有检查越界访问,但这些都不能解释你看到的问题。 -
应该是
queries[k]而不是queries[n]? (我无法真正说出你想要做什么,所以我不能说这是错误的)。