查找哈希表的值时,while循环中出现C ++分段错误

五星

我整个周末都在进行此操作-试图找出我的段错误发生的位置。我将其范围缩小到此功能,并认为我知道“为什么”发生。仅当执行查找时,它在哈希表中的NULL字段中运行时才会发生seg错误。

表@@@输出中的@@@空值仅在段错误之前出现-从来没有其他地方。我在它后面有一个continue语句-甚至将案件放在while循环中。怎么仍然有问题呢?“下一个...”也不会出现。它仅以@@空值@@错误结束,并在之后出现seg错误。

有什么帮助吗?下面提供的代码

record *hashtable::lookup(keytype k)
{
    if (!table) return NULL;
    int i;
    int pos = hash(k, i = 0);
    if ((pos < 0) || (pos >= tsize)) return NULL;
    i = 0;
    while ((table[pos]->key != k && i < tsize) || (table[pos] == NULL && i < tsize))
    {
        cout << "next.." << endl;
        i++;
        pos = (hash(k, 0) + i*secondhash(k)) % tsize;
        if (table[pos] == NULL)
        {
            cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@null value in table@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
            continue;
        }
        else {

        }
    }
    cout << "Got out of loop..." << endl;

    if (table[pos]->key == k) return table[pos];

    return NULL;
}
法兰克

问题可能出在您的while循环情况下

条件可以首先访问,table[pos]->key即使table[pos] == NULL可以按照true条件第二部分的建议进行访问也是如此每次都会产生分段错误table[pos] == NULL一个简单的解决方案是交换逻辑或的两个部分。

您可以更换

while ((table[pos]->key != k && i < tsize) || (table[pos] == NULL && i < tsize))

经过

while ((i < tsize) && ((table[pos] == NULL) || (table[pos]->key != k)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章