繁体   English   中英

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

[英]condition for loop c++ odd behavior

我有一个关于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;
  }

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

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

至于第二个循环总是循环的,我看到编译器设置了初始化的int,而没有为int的最大可能值(2,147,483,647)分配任何值,即使没有做很多事情,循环也将花费很长时间,并且看起来无限循环

采用 :

int j=0;

代替

int j;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM