[英]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
循环中的函数是否更改了使循环无限的ii
或j
的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.