提问者:小点点

循环浮点,核心转储C++


我不明白我做错了什么。我的代码应该只是从0增加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个答案

匿名用户

这里有两个问题:

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

2.使用浮点数作为下标是不寻常的,可能会导致错误发生。下标通常是要访问的项的偏移量,因此如果我要访问第五个元素,我使用4的下标,因为我将4空格前移到第五个元素。如果我使用1.5作为下标,那么我正在尝试向前移动11/2空格,而我们的std::vector不理解这一点。我猜vector的operator[]重载只需要一个int,所以当您放一个float时会发生某种类型的强制转换。

对于一个解决方案,看看我这里的另一个答案:在字符串的情况下不获取输出。

“core dumped”通常尝试取消引用null指针,或者,在本例中,尝试访问超出范围的对象。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(循环|浮点|核心|转|储|c++)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?