函数中的变量初始化错误

时间:2014-04-09 22:14:25

标签: c++ c

这个函数是在我的程序中实现的,但是当它被调用时会出现一个错误,说变量root是在没有被初始化的情况下使用的,有什么原因吗?

int find(int x)
{
    int i, j, root;

    for (i = x; parent[i] != i; i = parent[i])
        root = i;
    /* path compression */
    for (i = x; parent[i] != i; j = parent[i], parent[i] = root, i = j)
    {
        //donothing
    }
    return root;
}

4 个答案:

答案 0 :(得分:0)

这正是它所说的。如果parent[i] != i在开始时为false,则会在未初始化的情况下读取root

答案 1 :(得分:0)

编译器无法确保root将被初始化,因为对它的所有引用都在for循环内,如果不满足条件,则可能不会执行一次。

  1. 请在声明时设置root=x;
  2. 您的迭代器变量i应该在for循环中声明以正确限制其范围

答案 2 :(得分:0)

如果parent[x] == x会怎样?双循环实际上会运行,因为条件parent[i] != i将为false(因为i = x),因此root实际上永远不会设置为值。

所以,当我们返回root时,它的值是未定义的,这意味着它可以是任何

最简单的方法是在循环之前将root设置为某个初始值,例如0

答案 3 :(得分:0)

因为你正在做

for (i = x; parent[i] != i; i = parent[i])
        root = i;

所以在你的代码中你告诉我i = x而不是root = i 或者你还没有说明x的值是多少!那么编译器如何知道root的值? 你应该在for!

中使用之前初始化X.