C 2D char阵列有时会在随机位置复制数据



我正在使用2D char数组在屏幕上显示板。空板上装满了'。(点),程序在某个位置写入另一个字符('g')。问题是有时(每四次更少一次)出现一个重复的字符。

 4 |.  .  .  .  .  .  |
 3 |.  .  .  .  .  .  |
 2 |G  .  .  .  .  .  |
 1 |.  .  .  .  G  .  |
------------------------
    a  b  c  d  e  f

相关代码片段是:

class Field
{
 public:
static const int FIELDWIDTH=6;
static const int FIELDHEIGHT=4;
char field[FIELDWIDTH][FIELDHEIGHT];
..
};
void Field::empty(void){
  for(int r=0; r<FIELDHEIGHT; r++)
    for(int c=0; c<FIELDWIDTH; c++)
      field[r][c] = '.';
};
Field::plot(){                   //Plots the board
for(int r=FIELDHEIGHT;r>0;r--){
    cout << std::setw(2) << std::setfill(' ') << r << " |";
    for(int c=0;c<FIELDWIDTH;c++)
      cout << field[r-1][c] << "  ";
    cout << "|" << endl;
  };
...
};
void Field::putChar(void){
...
(random definition of pr2 and pc2 and validation within limits)
...
 field[pr2][pc2]='G';
 printCors(pr2,pc2); //cout coordinate for debug
...
};

仅有的两个分配[] [] []是一个空()中的一个,一个在putchar()中。empty()按预期工作总是导致绘图()so:

 4 |.  .  .  .  .  .  |
 3 |.  .  .  .  .  .  |
 2 |.  .  .  .  .  .  |
 1 |.  .  .  .  .  .  |
------------------------
    a  b  c  d  e  f

和putchar中的分配是用cout观看的,cout只输出一个坐标,但是有时会出现一个额外的字符,与预期的一个角色出现,在这里有些运行:

b1=
 4 |.  .  .  .  .  .  |
 3 |.  .  .  .  .  .  |
 2 |.  .  .  .  .  .  |
 1 |.  G  .  .  .  .  |
------------------------
    a  b  c  d  e  f
e2=
 4 |.  .  .  .  .  .  |
 3 |G  .  .  .  .  .  |
 2 |.  .  .  .  G  .  |
 1 |.  .  .  .  .  .  |
------------------------
    a  b  c  d  e  f
e4=
 4 |.  .  .  .  G  .  |
 3 |.  .  .  .  .  .  |
 2 |.  .  .  .  .  .  |
 1 |.  .  .  .  .  .  |
------------------------
    a  b  c  d  e  f
a1=
 4 |.  .  .  .  .  .  |
 3 |.  .  .  .  .  .  |
 2 |.  .  .  .  .  .  |
 1 |G  .  .  .  .  .  |
------------------------
    a  b  c  d  e  f
a4=
 4 |G  .  .  .  .  .  |
 3 |.  .  .  .  G  .  |
 2 |.  .  .  .  .  .  |
 1 |.  .  .  .  .  .  |
------------------------
    a  b  c  d  e  f

如果我对field [] [] =在putchar()函数中的分配发表评论,则董事会始终按预期为空,如果我添加其他分配,有时两个字符都是重复的,有时甚至是任何人。

用putchar()中的固定分配进行测试:

void Field::putChar(void){
...
(random definition of pr2 and pc2 and validation within limits)
...
 field[2][5]='H';
...
};

结果始终是:

 4 |.  H  .  .  .  .  |
 3 |.  .  .  .  .  H  |
 2 |.  .  .  .  .  .  |
 1 |.  .  .  .  .  .  |
------------------------
    a  b  c  d  e  f

看来重复的数据遵循模式,在可能的情况下始终出现重复次数-4,1 ...但是为什么呢?如果数组限制变化,则此模式随模式位置 - 菲尔德高的变化,相对于优点1。

解决此问题的想法?

field[r-1][c] R中从1转到FIELDHEIGHT,但是field的第一个维度具有FIELDWIDTH元素。我认为您的意思是field[c][r-1]

最新更新