c++ - 在 C++ 中比较来自向量的字符串时出现分段错误
问题描述
我的代码如下所示。单词是从两个文件中读入的,需要检查是否在两个文件中都出现了单词。在它与两者中的第一个单词匹配并将其添加到新向量后,我不断收到段错误。我之前添加了打印语句,它在遇到 seg 错误之前一直使用 int n 参数在循环中运行。我对 C++ 比较陌生,因此首选最基本的帮助方式。
#include <iostream>
#include <string>
#include <fstream>
#include <locale>
#include <vector>
using namespace std;
vector<string> wordOne;
vector<string> wordTwo;
fileOne.open(argv[2]);
fileTwo.open(argv[3]);
while (fileOne >> wordsFirstFile) {
wordOne.push_back(wordsFirstFile);
}
while (fileTwo >> wordsSecondFile) {
wordTwo.push_back(wordsSecondFile);
}
fileOne.close();
fileTwo.close();
int sizeOneWord = wordOne.size();
int sizeTwoWord = wordTwo.size();
vector<string> printWords;
int m = 0;
int n = 0;
for (m = 0; m <= sizeOneWord; m++) {
for (n = 0; n <= sizeTwoWord; n++) {
if (wordOne[m] == wordTwo[n]) {
printWords.push_back(wordOne[m]);
}
}
}
解决方案
假设sizeOneWord
是一个。这意味着只有一个合法索引进入wordOne
. 但是您的循环将循环两次,一次 withm == 0
和一次 with m == 1
。因此,如果向量中有一个元素,您将尝试访问两个元素。您需要将两个<=
比较更改为<
.
推荐阅读
- javascript - 首先打开“无数据”视图,然后打开详细信息页面,其中包含 Fiori 中的数据
- performance - python请求获取无效的url照明速度
- python-3.x - Pytest - 如何模拟或修补全局变量
- typescript - 如何从具有可选字段的现有接口创建缩小的打字稿接口?
- c++ - 使用 child_process spawn 运行时,多线程 EXE 不会产生所有线程
- php - 如何使用 CURL 访问 API?
- java - Java:切换2个方法参数(不同类型)以使用重载
- authentication - 使用 JWT 令牌的 dotnet 核心身份验证系统的奇怪行为
- map-api - 为 javascript Google Map API 添加 HTTP Referrers 时出错
- docker - minio 客户端在本地工作,但不能从 docker 容器工作