为整数数组赋值正在改变另一个整数数组

时间:2014-09-13 12:44:18

标签: c arrays pointers struct

我有这样的结构:

struct node {
    int state[9];
};

typedef struct node Node;

在我的代码的开头,我用一些状态初始化它。 然后,我根据ZERO位置为此状态生成可能的超级用户,例如:

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;

上面的案例是一个生成可能的过继状态的函数。并且&#34; n&#34;是我收到的节点:expand(Node * n);

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

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

如果您修改suc2->state[6]n->state[6]的值更改为相同的值,则n指向与suc2相同的节点。

如果您的数据结构具有从其第一个继承者返回节点的链接,则这是可能的,因此遍历两个级别实际上会将您带回到您已经开始的位置。

如果您知道您的算法不应该发生这种情况,请在代码中添加一个断言:

assert(suc2 != n);

由于算法中存在错误,这将在发生此问题时停止执行程序。