0

我对 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;
  }

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

4

2 回答 2

0

当您进行空初始化时, j 被初始化为恰好在存储它的内存空间中的任何值,至少对于我使用过的大多数编译器。由于您增加 j 我假设您没有在循环中对其进行初始化,因此您可能需要将 j = 0 或其他对您的程序有意义的值。

至于第二个循环总是循环,我已经看到编译器设置了初始化的整数,没有分配给整数的最大可能值(2,147,483,647),即使没有做太多也需要很长时间才能循环,看起来像一个无限循环。

于 2013-07-26T00:15:34.253 回答
0

利用 :

int j=0;

代替

int j;

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

于 2013-07-26T08:45:04.543 回答