Я работаю над проектом для одного из моих классов Comp Sci, который использует таблицы Ha sh для сортировки строк в вектор связанных списков из класса списков STL. При вставке строки в список все индексы, кроме индекса 3, всегда приводят к ошибке SEGFAULT. Я понятия не имею, почему это происходит. Вот код для функции вставки и несколько примеров ошибки, которую я получаю. Вектор «таблица» объявляется содержащим 4 элемента в конструкторе по умолчанию
void Stringset::insert(string word)
{
cout << "insertion" << endl;
hash<string> stringHash;
int hashIndex = stringHash(word) % size;
cout << hashIndex << endl;
bool exists = false;
//find intended index and create base boolean variable for whether or not the value already exists
list<string>::iterator pos = table[hashIndex].begin();
list<string>::iterator end = table[hashIndex].end();
for(pos; pos != end; pos++){
cout << "pass" << endl;
if((*pos).compare(word) == 0){
exists = true;
}
}
if(!exists){
table[hashIndex].push_back(word);
num_elems++;
cout << "inserted " << (*pos) << endl;
}
else{
}
}
Вот несколько примеров SEGFAULT, происходящих вместе со случаями вставки с 3 рабочими:
I: insert word
F: find word
R: remove word
P: print words in stringset
Q: quit
I
Enter word to insert: By
insertion
3
inserted
I: insert word
F: find word
R: remove word
P: print words in stringset
Q: quit
I
Enter word to insert: Try
insertion
3
pass
inserted
I: insert word
F: find word
R: remove word
P: print words in stringset
Q: quit
I
Enter word to insert: Error
insertion
2
Segmentation fault (core dumped)
Наряду с единичным регистром:
I: insert word
F: find word
R: remove word
P: print words in stringset
Q: quit
I
Enter word to insert: Error
insertion
2
Segmentation fault (core dumped)
Stringset.h, а также конструктором объектов Stringset по умолчанию:
#pragma once
#include <string>
#include <vector>
#include <list>
using namespace std;
//Stringset class, do not modify definitions for existing members
class Stringset
{
private:
vector<list<string>> table;
int num_elems;
int size;
public:
Stringset();
vector<list<string>> getTable() const;
int getNumElems() const;
int getSize() const;
void insert(string word);
bool find(string word) const;
void remove(string word);
};
Stringset::Stringset() : table(4), num_elems(0), size(4) {}
Я вполне уверен, что он всегда один раз падает программа запускается для l oop, но я не уверен, почему из-за моего незнакомства с итераторами. Будем весьма благодарны за любые идеи относительно того, как это исправить.