Dcristen7 2021-09-22 19:40 采纳率: 63.6%
浏览 59
已结题

c++如何解决段错误

碰到这种段错误一般要如何定位问题然后解决呢?

img

img


#include <iostream>
#include <vector> 

using namespace std;

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> ivec;
    int temp = 0;
    for (int i = 0; i != N; ++i) {
        cin >> temp;
        ivec.push_back(temp);
    }
    for (auto i = ivec.end() - M; i != ivec.end(); ++i) {
        cout << *i << " ";
    }
    for (auto i = ivec.begin(); i != ivec.end() - M; ++i) {
        cout << *i;
        if (i != ivec.end() - M - 1) {
            cout << " ";
        }
    }
    return 0;
}
  • 写回答

4条回答 默认 最新

  • 广大菜鸟 2021-09-22 19:54
    关注

    如果m大于n,是不是越界了
    常见的段错误如下:

    https://blog.csdn.net/qq_35703848/article/details/90670581
    目录
    1.段错误的定义
    2.段错误的常见原因
    2.1 使用未经初始化及或已经释放的指针地址
    2.2 访问受系统保护的内存地址
    2.3  写入只读的内存地址
    2.3 数组越界
    2.4 堆栈溢出
    2.5 文件操作符超出限制
    2.6 跨线程传递指针
    2.7 某些有特殊要求的系统调用
    

    但你这里应该是越界了

    #include<vector>
    using namespace std;
    int main() {
        int N, M,tmp;
        cin >>N>>M;
        vector<int>ivec;
        for (int i = 0; i < N; i++) {
            cin >> tmp;
            ivec.push_back(tmp);
        }
        M = M % N;//取真实有效移动位置
        for (auto i = ivec.end() - M; i != ivec.end(); ++i) {
            cout << *i << " ";
        }
        for (auto i = ivec.begin(); i != ivec.end() - M; ++i) {
            cout << *i;
            if (i != ivec.end() - M - 1) {
                cout << " ";
            }
        }
        cout << endl;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘