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

C++ 警告:未初始化变量//但我已初始化!C++;编译器错误?,c++,debugging,variables,warnings,initialization,C++,Debugging,Variables,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]!=

我试图编译这个程序,但我得到警告,当我运行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);

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

您已经声明了它们,但尚未初始化它们。只需写
intminn=0,index=0以避免警告。如果您不初始化变量,它的默认值是内存中该位置已经存在的值;通常是垃圾

问题是,如果
num
为负数,那么
min()
函数中的for循环都不会执行,因此
minn
index
不会被赋值。
if(i==num)
测试也不会中断函数并阻止这种情况发生。因此,函数的最后两行将具有完全未定义的结果


不过,有时确实没有未初始化的变量路径;有时,编译器还不够聪明,无法理解所有的细微之处。只需给它们一个初始值即可避免警告。

假设传入的整个数组为0。两个循环都短路且从不执行,minn和index都未初始化


如果发生这种情况,应该发生什么?将变量设置为正好实现这一点的值。

声明!=初始化。当您声明它们时,变量具有随机值。只需将它们初始化为合理的值,如index为-1,minn为INT_MAX。

但您尚未初始化它们:))
例如:
inti,minn=0,index=0
假设您传递的
num
等于
0
,最后您将返回
minn
的未初始化值,在此之前您将设置
mas[未知数]=0这可能会导致你的应用程序崩溃,因为你引用的内存很可能超出了你的范围。您应该在Begging中进行检查,如
if(num正如您在评论中所说,是的,您已经声明了变量,但尚未初始化它们。初始化变量意味着给它一个值。因此,在这种情况下,您已经告诉编译器您要创建三个整数,但您没有告诉它您要在这些整数中存储什么值。如果,对于每个POS,都通过函数、index和minn的路径保证给定一个值,但这里的问题是,通过函数的路径中的minn和index永远不会初始化。首先,这里:

for(i=0;i<num;i++)
{            
    if(mas[i]!=0)minn=mas[i];
    break;        
}

for(i=0;这不是他的问题。为什么编译器会抱怨未初始化,尽管(根据他的说法)在初始化之前没有使用它们的路径?但是有一个路径,不是所有的都初始化,比如num=-1。你需要改进你的代码。函数
int-min(int-mas[])
太难看了。
for(i=0;i<num;i++)
{            
    if(mas[i]!=0)minn=mas[i];
    break;        
}
for(i=0;i<num;i++) 
  if(mas[i]!=0 && minn>mas[i])        
  {
      minn=mas[i];
      index=i;
  }