【发布时间】:2021-04-30 14:47:26
【问题描述】:
我不明白我做错了什么。我的代码应该只是从零增加 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();
}
【问题讨论】:
-
两件事 -
vector<float> sinal;是一个大小为 0 的空向量,因此对其的任何索引都是无效的(并导致 UB)。对数组索引使用浮点值是不寻常的,请参阅stackoverflow.com/questions/588004/… -
也许您想改用
std::map<float, float>。虽然它有自己的陷阱。 -
由于您正在递增
0.1,因此无法保证您的循环将迭代您认为的次数,因为0.1是一个近似值。如果要循环 10 次,则使用整数索引重写循环,即for (int i = 1; i <= 10; ++i),并在循环内,将整数除以 10 后缩放回浮点数。Here is one resource explaining this issue