2014-01-25 39 views
0

目标是使用数组实现的HashTable,该数组处理通过指针实现的LinkedList。我有点困惑,因为我插入时为什么会出现seg错误。我有以下几点:C++指向数组指针的指针(使用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); 

}; 

方法:

​​

主营:

int main(int argc, char* argv[]) { 

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

从我的理解在关键的电流值应为NULL它不应该?

+0

你可以运行调试器并告诉哪条线路出现故障吗? – woolstar

+1

你肯定会访问一个未初始化的指针,就好像它指向某处有用。而对于我们所知道的,'_hash(key)> = size' – chris

+0

对不起,我应该也包括我的散列函数了。它的模块表大小,以确保它<=大小 –

回答

4

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

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

+0

有没有一种快速的方法来初始化所有NULL指针? –

+0

@MattStokes再次阅读。 –

+0

完美,谢谢。 –

1

您尚未分配任何Node对象。

Node** node = new Node*[size];分配Node*,但没有actilual节点对象。

+0

它不应该创建任何对象我正在寻找创建一个'Node *'数组初始化为'NULL',以便我可以开始将元素插入到HashTable中。 –