C卡在里面循环

时间:2011-10-29 15:15:30

标签: c

所以这是我的代码

int find_h(int i, int j, int current[N+1][N], int goal[N+1][N])
{
  int sum=0;
  int a, b;
  int cp[N*3], gp[N*3];
  for(a=0;a<N;a++)
  {
    for(b=0;b<N;b++)
    {
      cp[4*a+b]=current[a][b];
      gp[4*a+b]=goal[a][b];
      printf("b = %d\n", b);
    }
    printf("\n");
  }
  return sum;
}

N = 4,当前和目标用0到15之间的数字填充,每次只出现一次。

它在前3次迭代中循环很好(直到a = 3)但是它会一直输出b = 0。

由于

4 个答案:

答案 0 :(得分:2)

我认为你的循环正在覆盖内存。如果N = 4,则分配cp [12]和gp [12]。然而,当a = 3 cp [4 * a + b]和gp [4 * a + b]都是[12],它超过了数组的末尾

答案 1 :(得分:1)

我不知道你想做什么,但我会告诉你一件事:cpgp太小了。如上所述,它们应该很大N * N而不是N * 3(== 12)。

现在,cp[4*a+b]您应该写N*a+b。如果N == 4那么它就是一样的。否则...

目前尚不清楚:int current[N+1][N]这将是(N == 4)20个数组元素。然后,您将复制N * N元素的线性化数组(或者N * 3,见上文)...

答案 2 :(得分:1)

一个问题是cpgp太小。您要分配索引最多为4*(N-1)+(N-1)的元素,但数组只有3*N个元素。

当您在数组末尾写入时,程序的行为未定义。

答案 3 :(得分:0)

看起来你正在溢出cp和gp缓冲区。你应该为它们分配4 * N空间,而不是3 * N.你能尝试改变吗?我愿意,但我离开了我的电脑。