分段故障(核心转储)C++错误进程返回139(0x8B)



有人能解释一下这段代码出了什么问题吗?当我尝试运行该程序时,控制台中出现了此错误。

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main()
{
vector<int> nums = {2,1,9,4,4,56,90,3};
int target = 8;
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++){
m[nums[i]] = i;
}
int req_num;
for (int i=0; i<nums.size(); i++){
req_num = target - nums[i];
auto search = m.find(req_num);
int first = search->first;
int second = search->second;
if(first == req_num && second != i){
cout << second << endl;
}
}
return 0;
}

我不确定我做错了什么。如果有人能指出我的错误并解释我做错了什么,那将是非常有帮助的!!

我多次尝试运行该程序,认为这可能是一个构建错误。我得到了同样的结果。

在我把地图从有序改为无序之前,它一直工作得很好。

我打赌你在做两和题。分段错误的原因是find((可能并不总是在映射中找到您的req_num。通过解决这个问题,我修改了您的代码,它可以正常工作。

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main()
{
vector<int> nums = {2,1,9,4,4,56,90,3};
int target = 8;
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++){
m[nums[i]] = i;
}
int req_num;
for (int i=0; i<nums.size(); i++){
req_num = target - nums[i];
auto search = m.find(req_num);
if(search == m.end()) continue;
int first = search->first;
int second = search->second;
if(first == req_num && second != i){
cout << second << endl;
}
}
return 0;
}

我还修改了您的代码以使其更有意义。

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main()
{
vector<int> nums = {2,1,9,4,4,56,90,3};
int target = 8;
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++){
m[nums[i]] = i;
}
int req_num;
for (int i=0; i<nums.size(); i++){
req_num = target - nums[i];
if(m.find(req_num) != m.end()){
if(m[req_num]!=i){
cout << m[req_num] << endl;
}
};
}
return 0;
}

最新更新