我一直在努力解决这个问题。在给定的程序中,即使不触摸它,R也会不可预测地更新,这可以在我打印R为%d的第30行中看到。此外,在k循环的一些迭代之后,它显示出不可预测的行为。我不知道程序执行时会出现什么问题。请帮助我。提前谢谢。
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main() {
int T;
int R;
string test;
scanf("%d", &T);
int i = 0;
for (; i < T; i++) {
scanf("%d", &R);
printf("Hi R is %d\n", R);
int j = 1;
char c, p;
int k;
char help[94];
char b = 33;
int lop;
if (R != 0) {
for (k = 0; k < 94; k++) {
help[b + k] = 'f';
}
printf("R is %d\n", R);
for (; j <= R; j++) {
cin >> c >> p;
printf("C is %c and P is %c\n", c, p);
help[c] = p;
}
}
cin >> test;
int size = test.size();
if (R != 0) {
for (i = 0; i < size; i++) {
if (help[test.at(i)] != 'f')
test.replace(i, i, test.at(i), help[test.at(i)]);
}
}
cout << "string till now is " << test;
}
return 0;
}
很抱歉长代码。 输入输出示例是
5
3
Hi R is 3
R is 1717986918
答案 0 :(得分:0)
你的数组帮助是94个字符,但是你的循环会在help [b + k] =&#39; f&#39;中写出它的结尾,因为b = 33.所以,你基本上覆盖了内存;巧合的是,你注意到它是K。
int main() {
int T;
int R;
string test;
scanf("%d", &T);
int i = 0;
for (; i < T; i++) {
scanf("%d", &R);
printf("Hi R is %d\n", R);
int j = 1;
char c, p;
int k;
char help[94];
char b = 33;
int lop;
if (R != 0) {
for (k = 0; k < 94; k++) {
help[b + k] = 'f'; <----------- BOOM
}
编辑:添加代码以突出显示问题