我无法在任何地方找到类似的东西。我有一个指向哈希表的对象(链表)的指针数组:
LinkList * table[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
在我的哈希表类的一个函数中,我需要调用LinkList
数组中table
对象上的一个函数。我这样称呼它:
void HashMap::add_customer(string first, string last, string phone) {
int hash = get_hash(phone);
if (table[hash] == NULL) {
table[hash] = new LinkList;
}
table[hash]->add_customer(first, last, phone); // I HATE THIS LINE
}
所有内容编译都很好,但是当我在运行时执行table[hash]->add_customer()
行时,出现Segmentation Fault
错误。当这一行被注释掉时,我没有错误,但显然,我无法将任何客户添加到我的哈希表中。这不是正确的语法吗?
答案 0 :(得分:2)
你必须将你的指针数组初始化为NULL,因为它们将被分配在堆栈/堆上或任何带有垃圾值的地方....
LinkList * table[TABLE_SIZE];
memset(table, NULL, sizeof(LinkList *) * TABLE_SIZE);
假设你已经正确初始化,那么请检查你的哈希并断言它确实是哈希&lt; TABLE_SIZE
试试这个:
int hash = get_hash(phone) % TABLE_SIZE;
答案 1 :(得分:0)
对于哈希映射的行为,此代码片段看起来是正确的。我检查了LinkList实现中的add_customer方法。尝试使用此哈希映射之外的链接列表,只是为了确保它们按预期工作。
答案 2 :(得分:0)
试试这个:
LinkList * table[TABLE_SIZE] = {};
这使你的指针无效。
你能否确认get_hash返回值&lt; TABLE_SIZE?添加断言或其他内容。