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

Calling functions on an array of object pointers

本文关键字:调用 函数 数组 对象 指针      更新时间:2023-10-16

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

LinkList * table[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
    table[i] = NULL;

在我的哈希表类的一个函数中,我需要调用 table 数组中LinkList对象上的函数之一。我是这样称呼它的:

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

您必须初始化指向 NULL 的指针数组,因为它们将被分配到堆栈/堆或任何带有垃圾值的地方......

LinkList * table[TABLE_SIZE];
memset(table, NULL, sizeof(LinkList *) * TABLE_SIZE);

假设您已经正确初始化,那么请检查您的哈希值并断言它们确实是哈希

试试这个:

 int hash = get_hash(phone) % TABLE_SIZE;

对于哈希映射的行为,此代码段看起来是正确的。我会检查您的 LinkList 实现中的add_customer方法。尝试在此哈希映射之外使用链表,以确保它们按预期工作。

试试这个:

LinkList * table[TABLE_SIZE] = {};

这首先会使您的指针无效。


你能确认get_hash返回值<TABLE_SIZE吗?添加一个断言或其他东西。>