【发布时间】:2014-10-23 05:39:47
【问题描述】:
我必须遍历 2d 数组的每个索引并找到相邻值是什么,然后根据该值更新数组的索引。我下面的代码完成了所有这些操作,但是当我必须更新数组时,它会更新现有数组,因此下一个索引会产生不正确的输出。我尝试创建一个新数组,但是当我使用新数组时,没有任何更新并且它保持不变。这就是我现在所拥有的。
void ch(int **b, int w, int h)
{
int x,y,i,ct=0;
int **up;
up=malloc(sizeof(int *) * h);
for(i = 0; i<h; i++){
up[i]=malloc(sizeof(int)*w);
}
for (x=0;x<h;x++)
{
for(y=0;y<w;y++)
{
//...Computes Count Here(It Works)
//UPDATE BOARD - Does not update the board
if(b[x][y]==1 && ct<2)
{
up[x][y]=0;
}
else if(b[x][y]==1 && (ct==2 || ct==3))
{
up[x][y]=1;
}
else if(b[x][y]==1 && ct>3)
{
up[x][y]=0;
}
else if(b[x][y]==0 && ct==3)
{
up[x][y]=1;
}
ct=0;
}
}
b=up;
}
我尝试通过对其自身进行更改来更新二维数组 b,它会更改数组,但它不是我要查找的输出。它会在每次迭代时更改输出,因此其他索引的输出会发生更改,但我想要它以便另一个数组跟踪输出,以便它不会在每次迭代时更新 b 并给出正确的输出。我做错了什么不让我更新?解决此问题的最佳方法是什么?
【问题讨论】:
-
count定义在哪里? -
@JoelCornett 抱歉,这是一个错字。我的意思是ct。更新了代码!
-
您没有
else子句来捕捉不可能的事情。也许不可能的事情发生得太频繁了? -
也许你应该尝试在函数中打印
up;这会告诉你它正在被设置(或没有)。您应该返回新数组——创建函数char **ch(int **b, int w, int h) { …; return up; }。或者,您必须使用三重指针参数,并对代码进行一些调整。请注意,如果覆盖原始数组指针,则必须担心内存泄漏。
标签: c arrays multidimensional-array