警告:未初始化的变量//但我已经初始化了!C++编译器错误?

Dav*_*ani 6 c++ variables debugging warnings initialization

我试图编译这个程序,但我收到警告,当我运行vc ++ 2010调试器时弹出:(这是我的代码:

#include <iostream>
using namespace std;
int num;
int min(int mas[])
{
    int i,minn,index;        /* But I have declared them : (((( */
    for(i=0;i<num;i++)
        {
            if(mas[i]!=0)minn=mas[i];
            break;
        }
    if(i==num) return 0;
    for(i=0;i<num;i++)
       if(mas[i]!=0 && minn>mas[i])
        {
            minn=mas[i];
            index=i;
        }

    mas[index]=0;
    return minn;
}

int main()
{
    cin>>num;
    int *array=new int[num];  int tmp;
    tmp=min(array);

}
Run Code Online (Sandbox Code Playgroud)

这是一个编译器日志:

prog.cpp: In function ‘int min(int*)’:
prog.cpp:6: warning: ‘index’ may be used uninitialized in this function
prog.cpp:6: warning: ‘minn’ may be used uninitialized in this function
Run Code Online (Sandbox Code Playgroud)

我做错了什么?或者它是编译器错误?:) 谢谢 :)

pto*_*ato 17

您已声明它们,但未初始化它们.只需编写int minn = 0, index = 0;以避免警告.如果不初始化变量,则其默认值为内存中该位置的任何值; 通常是垃圾.

问题是,如果num为负,则既不的在您的循环min()功能将执行,所以minnindex不会被赋值.该if(i == num)测试也不会突破该功能并防止这种情况发生.因此该函数的最后两行将具有完全未定义的结果.

但是,有时确实没有一条路径可以使用未初始化的变量; 有时编译器不够聪明,无法弄清楚所有细微之处.只要给他们一个初始值,以避免警告.

  • 但是有一条路径不是所有的都被初始化,比如num == -1. (3认同)