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()
功能将执行,所以minn
并index
不会被赋值.该if(i == num)
测试也不会突破该功能并防止这种情况发生.因此该函数的最后两行将具有完全未定义的结果.
但是,有时确实没有一条路径可以使用未初始化的变量; 有时编译器不够聪明,无法弄清楚所有细微之处.只要给他们一个初始值,以避免警告.