Я пытаюсь прочитать текст из файла и при этом отслеживаю содержание текста.Если слово, которое не было просмотрено до того, как оно было вставлено в карту и инициализировано значением 1. Если оно было замечено (существует на карте), то значение просто увеличивается.
Если я удаляюДействие вызова оператора []
, тогда чтение файла работает нормально.Я выводю содержимое первого файла в выходной файл для подтверждения того, что чтение файла прошло успешно.
Итак, возникает проблема при добавлении ключей / значений на карту. Кажется, что мой код вызывает ошибку при повторном входе в цикл while.
Вот простой класс, который действует как счетчик слов, и основной метод, который обрабатывает открытие файлов, созданиеобъект и чтение файла.
#include <map>
#include <string>
#include <fstream>
using namespace std;
class WordCounter
{
public:
map<string, int> words;
WordCounter operator[] (const std::string &s)
{
++words[s];
// If we put a breakpoint here in GDB, then we can print out the value of words with GDB.
// We will see that we sucessfully entered the first string.
// But, the next time we enter the while loop we crash.
}
}
};
int main()
{
WordCounter wc;
ifstream inFile;
ofstream outFile;
string word;
inFile.open("input.txt");
outFile.open("output.txt");
while(inFile>>word)
{
outFile << word << " ";
wc[word]; // This line seems to cause a segfault
}
inFile.close();
outFile.close();
}