2013-07-26 37 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,使循環無限值。