碰到这种段错误一般要如何定位问题然后解决呢?
#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