变量值的不可预测的更新

时间:2014-06-08 10:20:17

标签: c++ character codeblocks dev-c++

我一直在努力解决这个问题。在给定的程序中,即使不触摸它,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

1 个答案:

答案 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
    }

编辑:添加代码以突出显示问题