在对象指针数组上调用函数

时间:2012-06-12 23:36:07

标签: c++ arrays pointers hash

我无法在任何地方找到类似的东西。我有一个指向哈希表的对象(链表)的指针数组:

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错误。当这一行被注释掉时,我没有错误,但显然,我无法将任何客户添加到我的哈希表中。这不是正确的语法吗?

3 个答案:

答案 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?添加断言或其他内容。