【问题标题】:condition for loop c++ odd behavior循环c ++奇怪行为的条件
【发布时间】:2013-07-26 00:00:43
【问题描述】:

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

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

【问题讨论】:

  • 欢迎来到 Stack Overflow。请尽快阅读About 页面。你还没有初始化j,所以你得到了不确定的值。
  • 感谢您的回复。但我使用的 j 值与我在第一行初始化的值相同。此外,如果我在第一个 for 循环之外输出 j 的值,我会得到正确的值。
  • int j; 未初始化 jint j = 0; 确实如此。
  • 你能告诉我们函数alphaSol_filtbetaSol_filt吗?

标签: c++ for-loop scope


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用:

    int j=0;

    而不是

    int j;

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

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      相关资源
      最近更新 更多