目标是使用通过使用指针实现的LinkedList处理冲突的数组实现的HashTable。当我去插入时,我有点困惑为什么我是段错误。我有以下内容:
类:
struct Node {
string key;
int value;
Node* next;
};
class HashTable{
public:
HashTable(int);
//~Hash();
void insert(string, int);
void remove(string);
private:
Node** _table;
int _table_size;
int _hash(string);
};
方法:
HashTable::HashTable(int size): _table_size(size) {
_table = new Node*[size];
}
int HashTable::_hash(string key) {
int hashValue = 0;
for (int i=0;i<key.length();i++) {
hashValue = 37*hashValue+key[i];
}
hashValue %= _table_size;
return hashValue;
}
void HashTable::insert(string key, int value){
int hashValue = _hash(key);
cout << _table[hashValue]->key << endl;
}
主:
int main(int argc, char* argv[]) {
HashTable* h = new HashTable(11);
h->insert("test",4);
}
根据我的理解,如果不是,那么key中的当前值应为NULL?
答案 0 :(得分:4)
_table = new Node*[size]
创建一个size
未初始化指针的数组,因此_table[hashValue]->key
是未定义的行为。
要将整个数组初始化为NULL
,请执行_table = new Node*[size]()
。或者使用std::vector
。
答案 1 :(得分:1)
您实际上没有分配任何Node
个对象。
Node** node = new Node*[size];
分配一个Node*
数组,但没有实际的节点对象。