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
作为下标,那么我试图向前移动 1
和 1/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' 值;所以使用浮点类型作为索引是很奇怪的。
我不明白我做错了什么。我的代码应该只增加 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
作为下标,那么我试图向前移动 1
和 1/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' 值;所以使用浮点类型作为索引是很奇怪的。