[英]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.