2013-07-26 38 views
0

我有一个关于变量里面在C++的循环范围的问题。 我有一个变量j如下条件环路C++的古怪行为

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循环的条件如下

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

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

+0

欢迎堆栈溢出。请尽快阅读[关于]页面。你还没有初始化'j',所以你得到了不确定的值来处理。 –

+0

谢谢你的回复。但是我使用的是我在第一行初始化的j值。另外如果我输出第一个for循环外的j值,我会得到正确的值。 –

+5

'int j;'不初始化'j'。 'int j = 0;'做。 –

回答

0

当你有一个空的初始化,j被初始化为任何值恰好是在它被存储在,最少的内存空间与我使用的大多数编译器。既然你增加Ĵ我想你不会在环路初始化它,所以你可能会需要把J = 0,或其他一些价值有意义的程序。

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

0

利用:

int j=0;

代替

int j;

,并检查for循环内的功能改变的iij,使循环无限值。