我正在尝试编写一个程序来查找并打印出序列的均衡索引(一个索引,使得较低索引处的元素总和等于较高索引处元素的总和)。但是我收到以下错误消息:
Run-Time Check Failure #3 - The variable 'e' is being used without being initialized.
这是我的代码:
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <fstream>
#include <sstream>
using namespace std;
int equi( vector<int> Vec , int index );
int main( int argc, char** argv )
{
vector<int> A( 5 );
A[ 0 ] = 7;
A[ 1 ] = 2;
A[ 2 ] = -4;
A[ 3 ] = 6;
A[ 4 ] = 3;
int e;
equi( A, e );
system( "PAUSE" );
}
int equi( vector<int> Vec , int index )
{
index = 0;
int leftSum = 0;
int rightSum = 0;
for ( int j = 0 ; j < Vec.size() ; j++ )
{
for ( int i = index + 1 ; i < Vec.size() ; i++ )
{
rightSum = rightSum + Vec[ i ];
};
if ( leftSum == rightSum ) return index;
else
{
leftSum = leftSum + Vec[ index ];
index++;
};
}
return -1;
}
有人可以帮我找出我做错了什么吗?为什么在e
和函数声明和定义中声明为整数时,我需要初始化main
???
谢谢,
答案 0 :(得分:4)
int e = 0;
equi( A, e );
应初始化为一个值,否则将其(按值)传递给函数equi
。这意味着函数equi
会获取值的副本(例如e
内的equi
的任何更改都不会在外部显示。
答案 1 :(得分:3)
您的代码现在的方式,e
保持未初始化状态,并将其副本传递给equi
。你想做其中一个:
void equi(vector<int> Vec, int & index);
...
int e;
equi(A, e);
或
int equi(vector<int> Vec);
...
int e = equi(A);
在第一种方法中,您的equi
函数实际上会更改传递给它的索引。现在你正在通过值传递,从而给equi
e
变量的副本,然后当然不会改变。{1}}变量。设置函数的返回类型void
,并将最终return -1
更改为index = -1
。
在第二种方法中,只需从index
中删除equi
参数,然后将其设为本地参数。只需将返回值分配给e
。
答案 2 :(得分:1)
在C ++中,内置类型(如int)未初始化为零。这意味着使用它时e的值是未定义的。 int e = 0
会解决此问题。