如何解决float for 循环,核心转储 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. 使用浮点数作为下标是不常见的,并且可能会导致错误发生。下标通常是你要访问的项目的偏移量,所以如果我要访问第五个元素,我使用4
的下标,因为我向前移动4
个空格才能到达第五个元素元素。如果我将 1.5
作为下标,那么我试图向前移动 1
和 1/2
空格,而我们的 std::vector
不明白这一点。我猜想向量的 operator[]
的重载只需要一个 int
,所以当你放置一个浮点数时会发生某种类型的转换。
有关解决方案,请在此处查看我的其他答案:Not getting output in case of string。
“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' 值;所以使用浮点类型作为索引是很奇怪的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。