【问题标题】:Segmentation fault (core dumped) - C++ Error分段错误(核心转储) - C++ 错误
【发布时间】:2021-10-19 00:33:08
【问题描述】:

我正在尝试编写一个简单的向量加法代码,但出现此错误。我不知道那是什么。我在 Ubuntu 18.04 中使用 VS Code。

int main(){
    std::vector<int> vect1 = {1,2,3,4,5};
    std::vector<int> vect2 = {6,7,8,9,10};
    std::vector<int> vectsum;

    for (int i = 0; i < vect1.size(); i++){
        std::cout << vect1[i] << " ";
    }

    std::cout << std::endl;

    for (int j = 0; j < vect2.size(); j++){
        std::cout << vect2[j] << " ";
    }

    for(int i = 0; i < vect1.size(); i++){
        vectsum[i] = vect1[i] + vect2[i];
    }

    for (int i = 0; i < vectsum.size(); i++){
        std::cout << vectsum[i] << " ";
    }
    return 0;
}

输出:

1 2 3 4 5 
Segmentation fault (core dumped)

【问题讨论】:

    标签: c++ for-loop vector segmentation-fault


    【解决方案1】:

    你还没有为 vectsum 分配任何内存(所以当你给其中一个元素赋值时你会碰到一个 NULL 指针)

    std::vector<int> vectsum(5);
    

    【讨论】:

      【解决方案2】:

      vectsum[i] = vect1[i] + vect2[i]; 行中,您不要通过下标容器将元素添加到vectsum。您正在尝试访问未分配的内存区域。

      一个简单的解决方案可以是以下形式:

      for(int i = 0; i < vect1.size(); i++){
          // Allocate memory as needed
          vectsum.push_back(vect1[i] + vect2[i]);
      }
      

      使用下标时还应考虑以下警告:

      warning: comparison of integer expressions of different signedness: 
      ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’}
      

      这告诉你不要混合有符号和无符号类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2017-02-25
        • 2016-07-12
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多