指向数组指针的C ++指针(带有LinkedList冲突处理的HashTable)

时间:2014-01-25 18:41:05

标签: c++ arrays pointers

目标是使用通过使用指针实现的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?

2 个答案:

答案 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*数组,但没有实际的节点对象。