我正在研究我的數據結構類的哈希表實驗室。當我在插入函數中使用push_back()函數時,我不斷收到一個我認爲正在發生的設置錯誤。但是,我不確定是什麼導致了這個錯誤。當我嘗試push_back C++項目時,爲什麼會出現seg故障?
using namespace std;
HashTable::HashTable(int buckets) {
this->buckets = buckets;
vector<Entry>* table = new vector<Entry>[buckets];
}
Entry HashTable::insert(GameBoard board, int number) {
int index = compress(board.hashCode());
Entry entry = Entry(board, number);
table[index].push_back(entry);
return entry;
}
int HashTable::compress(int hashCode) {
return (hashCode % buckets);
}
Entry::Entry(GameBoard board, int value) {
this->board = board;
this->value = value;
}
int GameBoard::hashCode() {
int hashVal = 0;
for (int r = 0; r < DIMENSION; r++) {
for (int c = 0; c < DIMENSION; c++) {
hashVal = ((127 * hashVal) + board[r][c]) % 16908799;
}
}
return hashVal;
}
它是push_back調用還是它是[]運算符?我對'vector * table = new vector [buckets];'的合法性有些模糊,但段錯誤通常是來自壞數組索引。 –
sabreitweiser
'hashCode%bucket''不會產生一個統一的分佈,除非'bucket'分割可能的哈希數。記住這一點。 –
加載調試器的時間。 (我們不能爲你從這裏做到這一點) –