程序使用向量找到平衡指数失败

时间:2011-04-04 15:49:43

标签: c++ vector

我正在尝试编写一个程序来查找并打印出序列的均衡索引(一个索引,使得较低索引处的元素总和等于较高索引处元素的总和)。但是我收到以下错误消息:

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 ???

谢谢,

3 个答案:

答案 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会解决此问题。