Ошибка сегментации при сравнении строк из векторов в C ++ - PullRequest
0 голосов
/ 08 октября 2018

У меня есть мой код, как показано ниже.Слова считываются из двух файлов и должны быть проверены, чтобы увидеть, есть ли слово в обоих файлах.Я продолжаю получать ошибку сегмента после того, как оно совпадает с первым словом в обоих и добавляет его к новому вектору.Я добавил операторы печати ранее, и он продолжает проходить через цикл с параметром int n, прежде чем он попадет в ошибку seg.Я довольно новичок в 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]);
             }
        }
    }

1 Ответ

0 голосов
/ 08 октября 2018

Предположим, sizeOneWord равен единице.Это означает, что в wordOne есть только один юридический индекс.Но ваш цикл будет повторяться дважды, один раз с m == 0 и один раз с m == 1.Поэтому, если в векторе есть один элемент, вы попытаетесь получить доступ к двум элементам.Вам нужно изменить оба <= сравнения на <.

...