c++ - 将cin值放入数组时出现段错误
问题描述
这是我的所有代码:
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <iostream>
using namespace std;
int main(){
ifstream fin("cereal.in");
ofstream fout("cereal.out");
int n, m, f, s;
cin >> n >> m;
int c1[n];
int c2[n];
for(int i = 0; i < n; i++){
cin >> c1[i] >> c2[i];
c1[i]--;
c2[i]--;
}
vector<int> fm(m, -1);
set<int> fs;
vector<int> ans;
for(int i = n-1; i >= 0; i++){
if(fs.find(c1[i]) == fs.end()){
fs.insert(c1[i]);
}else{
if(fs.find(fm[c1[i]]) == fs.end()){
fs.insert(fm[c1[i]]);
}
}
fm[c1[i]] = c2[i];
ans.push_back(fs.size());
}
for(int i = 0; i < n; i++){
cout << ans[i] << endl;
}
}
在第一个 for 循环 wheni = n-1
中,我得到一个Segmentation fault: 11
. 我在该 for 循环中的 cin 之后使用了 cout 调用来查找此信息。
这是什么原因?几分钟前它工作得很好,我什至没有接触这部分代码,它就停止了工作。我正在使用 VS Code,但即使我使用在线编译器,它也不起作用。这是我给出的输入:
4 2
1 2
1 2
1 2
1 2
请帮我。这不是我第一次遇到这样的问题。
解决方案
for(int i = n-1; i >= 0; i++){ // <------
if(fs.find(c1[i]) == fs.end()){
fs.insert(c1[i]);
}else{
if(fs.find(fm[c1[i]]) == fs.end()){
fs.insert(fm[c1[i]]);
}
}
fm[c1[i]] = c2[i];
ans.push_back(fs.size());
}
更改为i--
。您正在使用c1[i]
超出范围的索引进行访问。
推荐阅读
- javascript - 如何在 Google Apps 脚本中拆分字符串以避免“JOIN 的文本结果超过 50000 个字符的限制”?
- javascript - 我可以找到 html 网页中的特定 div id 是否存在初始化变量吗?
- python - 在数据集中进行分割
- r - 变异一列并根据 matchin gof 两列从另一列填充其值
- vue.js - 存储状态更改时数据不更改
- java - 在 Java 中使用 MongoDB 驱动程序 POJO
- c# - Epplus 将范围对象转换为 c# 模型
- reactjs - RequireJs 与 Babel
- angular - 使用角度形式 ControlValueAccessor 和 mat-autocomplete
- spring-boot - 在 Spring Cloud Gateway 中将配置从 Ribbon 更改为 Spring Cloud Load Balancer