首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向指针数组的C++指针(HashTable与LinkedList冲突处理)

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

Stack Overflow用户
提问于 2014-01-25 18:41:04
回答 2查看 1.3K关注 0票数 0

目标是使用数组来实现HashTable,该数组通过用指针实现的LinkedList来处理冲突。当我去插入时,我有点困惑,不知道为什么我会出错。我有以下几点:

课程:

代码语言:javascript
复制
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);

};

方法:

代码语言:javascript
复制
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;
}

Main:

代码语言:javascript
复制
int main(int argc, char* argv[]) {

  HashTable* h = new HashTable(11);
  h->insert("test",4);
}

根据我的理解,键中的当前值应该是空的,不是吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-25 18:44:04

_table = new Node*[size]创建一个size未初始化指针数组,因此_table[hashValue]->key是未定义的行为。

若要将整个数组初始化为NULL,请执行_table = new Node*[size]()。或者使用std::vector

票数 4
EN

Stack Overflow用户

发布于 2014-01-25 18:47:26

实际上还没有分配任何Node对象。

Node** node = new Node*[size];分配一组Node*,但不分配活动节点对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21354653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档