所以这是我的代码
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。
由于
答案 0 :(得分:2)
我认为你的循环正在覆盖内存。如果N = 4,则分配cp [12]和gp [12]。然而,当a = 3 cp [4 * a + b]和gp [4 * a + b]都是[12],它超过了数组的末尾
答案 1 :(得分:1)
我不知道你想做什么,但我会告诉你一件事:cp
和gp
太小了。如上所述,它们应该很大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)
一个问题是cp
和gp
太小。您要分配索引最多为4*(N-1)+(N-1)
的元素,但数组只有3*N
个元素。
当您在数组末尾写入时,程序的行为未定义。
答案 3 :(得分:0)
看起来你正在溢出cp和gp缓冲区。你应该为它们分配4 * N空间,而不是3 * N.你能尝试改变吗?我愿意,但我离开了我的电脑。