float for 循环,核心转储 c++

float for loop, core dumped c++

我不明白我做错了什么。我的代码应该只增加 i: 0.1 从零开始,然后将 0.5 添加到每个位置,非常简单,但我得到 segmentation fault (core dumped).

谁能帮我一把?

vector<float> sinal;

int main(){
  sinal[0] = 0;
  for (float i = 0.1; i <= 1; i += 0.1){
    sinal[i] = sinal[i - 1] + 0.5;
    if (i == 1){
      break;
    }
    cout << "\n" << sinal[i];
  }

getchar();
cin.get();
}
 

这里有两个问题:

1.当您访问sinal[0]sinal[i]时,sinal还没有任何容量。

2. 使用浮点数作为下标是不常见的,并且可能会出错。下标通常是你要访问的item的偏移量,所以如果我要访问第五个元素,我使用4的下标,因为我向前移动4个空格到第五个元素。如果我做 1.5 作为下标,那么我试图向前移动 11/2 空间,而我们的 std::vector 不明白这一点。我猜 vector 的 operator[] 重载只需要一个 int,所以当你放一个浮点数时会发生某种类型的转换。

如需解决方案,请在此处查看我的其他答案:

“Core Dumped”经常试图解除对 null 指针的引用,或者在这种情况下,试图访问超出范围的对象。

问题是浮点数的精度,以及使用浮点数作为索引。

vector<float> sinal {0};

int main()
{
    for (int idx = 1; idx <= 10; idx++)
    {
        auto last = sinal.back(); // reference to last element in vector
        sinal[idx] = last + 0.5;
        if (i < 10)
        {
            cout << "\n" << sinal[idx]; 
            // cout << "\n" << sinal.back(); // Even better 
        }

    }
    //... more code...
}

operator[] 函数需要一个 'size_type' 值;所以使用浮点类型作为索引是很奇怪的。