C++ 比较C+中向量的字符串时出现分段错误+;

C++ 比较C+中向量的字符串时出现分段错误+;,c++,vector,segmentation-fault,string-comparison,C++,Vector,Segmentation Fault,String Comparison,我的代码如下所示。这些单词是从两个文件中读入的,需要检查两个文件中是否都出现了一个单词。我不断得到一个seg错误,在它匹配了两个单词中的第一个单词并将其添加到新的向量之后。我在前面添加了print语句,在遇到seg故障之前,它一直使用int n参数在循环中运行。我对C++很陌生,所以最基本的帮助方式是首选。 #include <iostream> #include <string> #include <fstream> #inc

我的代码如下所示。这些单词是从两个文件中读入的,需要检查两个文件中是否都出现了一个单词。我不断得到一个seg错误,在它匹配了两个单词中的第一个单词并将其添加到新的向量之后。我在前面添加了print语句,在遇到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]);
             }
        }
    }
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
向量字;
向量词2;
fileOne.open(argv[2]);
fileTwo.open(argv[3]);
while(fileOne>>wordsFirstFile){
wordOne.push_back(wordsFirstFile);
}
while(文件两个>>单词第二个文件){
wordTwo.push_back(wordsSecondFile);
}
fileOne.close();
fileTwo.close();
int-sizeOneWord=wordOne.size();
int-sizeTwoWord=wordTwo.size();
矢量印刷字;
int m=0;
int n=0;

对于(m=0;m假设
sizeOneWord
为1。这意味着
wordOne
中只有一个合法索引。但是您的循环将循环两次,一次使用
m==0
,一次使用
m==1
。因此,如果向量中有一个元素,您将尝试访问两个元素。您需要同时更改
或使用foreach循环:
for(const auto&lhs:sizeneword)
@JamesPicone为了完整起见,您可能指的是(const auto&s:wordOne)的
我尝试更改顶部的比较,但没有改变任何东西。我以前检查它们时,大小是正确的。我对整数使用了基本相同的代码,效果很好,所以我不明白为什么字符串不能以相同的方式工作。@Tas oops!是的。@user2217读取向量的“结束”部分(此代码正在执行此操作)是“未定义的行为”,未定义的行为可以做任何它想做的事情,包括“看起来工作”。实际上,字符串是一个复杂的对象,而int不是,因此被解释为字符串的内存可能不满足字符串如何工作的一些内部要求,并导致分段错误。