循环c ++奇怪行为的条件

时间:2013-07-26 00:00:43

标签: c++ for-loop scope

我对c ++中for循环中的变量范围有疑问。 我有一个变量j来计算某个条件,如下面的代码所示

int j;
for (int i=0; i<8; i++){
    if ((betaSol(i,0) >= -HalfPi) && (betaSol(i,0) <= HalfPi)){
        // j gives size of new vector where beta is within bounds
        j++;
    }
}
Eigen::MatrixXd vectorname(j,1);

现在我想在下一个for循环的条件下使用相同的j,如下所示

 for (int ii = 0; ii<j; ii++ ){
        vectorname(ii,0)  =  functionname(alphaSol_filt(ii,0),betaSol_filt(ii,0));
    }

以下是问题发生的地方。 这成为一个无限循环,ii超出界限。奇怪的是,当我用以下内容替换第二个循环时:

  for (int ii = 0; ii<j; ii++ ){
    std::cout << j <<std::endl;
  }

它确实可以正常工作。但是,如果我改变任何东西,那么它就变成了一个无限循环,我不知道会发生什么

2 个答案:

答案 0 :(得分:0)

当你有一个空的初始化时,j被初始化为它存储在存储空间中的任何值,至少对于我使用过的大多数编译器来说。因为你增加j我假设你没有在循环中初始化它,所以你可能需要把j = 0,或者其他一些对你的程序有意义的值。

至于第二个循环总是循环,我看到编译器设置初始化的int没有赋值为int的最大可能值(2,147,483,647),这需要很长时间才能循环,即使没有做太多的事情也是如此。看起来像是一个无限循环。

答案 1 :(得分:0)

使用:

int j=0;

而不是

int j;

并检查for循环中的函数是否会更改使循环无限的iij的值。