C++ 警告:未初始化变量//但我已初始化!C++;编译器错误?
我试图编译这个程序,但我得到警告,当我运行vc++2010调试器时,弹出:( 这是我的密码: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]!=
#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;
}