获取错误-初始化之前引用了局部变量

时间:2019-02-21 14:52:49

标签: c

我编写了一个简单的函数,该函数读取指向数组的指针。它查看数组的元素,并比较相邻的值是否相等。如果它们相等,则将其值添加到“ sum”

我收到一个运行时错误,告诉我在初始化之前已引用“本地”和”。我不明白这一点,因为sum肯定是在我的函数中初始化的。参见代码片段。

int arrRead (char *Pinput){

    int sum, a, b = 0;

    while (*Pinput){
        a = *Pinput;
        ++Pinput;
        b = *Pinput;
        if(a == b)
            sum += a;
    }
    return sum;
}

3 个答案:

答案 0 :(得分:6)

int sum, a, b = 0;

这里只有b0初始化。

suma未初始化。

您需要写:

int sum = 0, a = 0, b = 0;

或者,每个变量都位于其自己的行上:

int sum = 0;
int a = 0;
int b = 0;

即使从技术上讲,即使仅需要sum进行初始化才能使算法起作用,在声明时初始化所有变量也是一种很好的做法。


@melpomene的另一个好的建议是缩小变量的范围。例如ab仅在while循环中使用:

int sum = 0;

while (*Pinput){
    int a = *Pinput;
    ++Pinput;
    int b = *Pinput;
    if(a == b)
        sum += a;
}
return sum;

答案 1 :(得分:2)

您不是用

初始化sum
int sum, a, b = 0;

仅初始化b。您还需要为sum添加一个初始化程序。

int sum=0, a=0, b = 0;

答案 2 :(得分:0)

运算符+=将右边的值添加到左边的值,然后将总和存储回左边的值。

如果sum未初始化,则操作sum += X调用未定义的行为;结果取决于先前的sum值。