You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ 浮点循环为vector赋值触发segmentation fault (core dumped) 求助

段错误触发根因
  • 未分配空间就访问vector元素
    全局声明的vector<float> sinal默认构造后size为0,没有任何可用的元素存储空间。直接执行sinal[0] = 0属于向未申请的内存地址写入数据,这是触发段错误的最直接原因。

    注意:vector的[]运算符不做下标合法性检查,也不会自动扩容,传入的下标只要超过当前vector的实际长度,就会直接访问非法内存。

  • 使用浮点数作为vector下标
    循环变量i是float类型,取值从0.1开始递增,直接写sinal[i]、sinal[i-1]本质是将浮点数强制转换为无意义的整数下标(例如0.1、0.2转成整数都为0),哪怕提前给vector分配了空间,这种写法也完全达不到“依次为相邻位置赋值”的预期逻辑。

  • 浮点数相等判断的逻辑隐患
    浮点数累加存在固有的精度误差,直接判断i == 1大概率永远不会成立,循环会持续执行直到再次触发内存越界。

修正后符合预期逻辑的代码
#include <vector>
#include <iostream>
using namespace std;

// 提前分配足够的元素空间:对应从0到1、步长0.1共11个数值
vector<float> sinal(11);

int main(){
  sinal[0] = 0;
  // 用整数类型做循环下标,规避浮点数精度问题
  for (int idx = 1; idx <= 10; idx++){
    float current_step = idx * 0.1;
    // 在上一个元素值的基础上加0.5完成赋值
    sinal[idx] = sinal[idx - 1] + 0.5;
    if (current_step == 1){
      break;
    }
    cout << "\n" << sinal[idx];
  }

  getchar();
  cin.get();
}

内容的提问来源于stack exchange,提问作者DepletedKnowledge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 12:45:01