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;
}

如果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;
}

cout << *i <<
应该是cout<<i吧。i是整型啊, * i取不到值啊

上debug,一般会在debug中在跑到某条语句的时候报错退出,或者在生成debug文件的时候报错

ivec.end() - M中M过大的时候,指针会超出数组头,可以先对M取个余数
M=M%N