2014-09-13 57 views
2

我有一个结构是这样的:将值分配给一个整数阵列正在改变另一个整数数组

struct node { 
    int state[9]; 
}; 

typedef struct node Node; 

在我的代码的开始,我与一些状态初始化。 然后,我生成可能sucessors到该状态下,基于所述零点位置,例如:

case(7): 
    printf("Before generating sucessor 2:\n"); 
    for(i=0;i<9;i++) printf("%d,", n->state[i]) 
    suc2->state[7] = n->state[6]; 
    suc2->state[6] = 0; 
    printf("After generating sucessor 2:\n"); 
    for(i=0;i<9;i++) printf("%d,", n->state[i]) 
break; 

以上的情况是在产生可能sucessors状态的功能。 “n”是我收到的节点:expand(Node * n);

我的问题是:n状态是不同的后,我产生了sucessor 2.我不明白为什么,因为我只是改变继承2状态。

这可能是什么原因造成的?

+4

也许'n'和'suc2'指向相同的结构 – 2014-09-13 12:51:26

回答

3

如果当你修改suc2->state[6]n->state[6]改变为相同的值,然后n指向同一个节点suc2值。

如果你的数据结构有一个从其第一个后继节点返回节点的链接,这是可能的,所以在实际上遍历两个级别会使你回到你已经开始的地方。

如果你知道你的算法是这样的,这是不应该发生的,添加一个断言代码:

assert(suc2 != n); 

当这个问题发生,因为这种错误的将停止你的程序的执行在算法中。

+0

是的,你是对的,它们指向相同的东西。现在我看到我的问题是:sucessor2在下一个算法阶段选择为n,所以当我创建我的下一个成功者时,我正在改变我的n(它在前期阶段变成了sucessor2)。所以,我想我可以解决它在我的扩展功能中分配我的成功者....好吧,谢谢! – Frank 2014-09-13 13:12:42

相关问题