简单的非加密哈希函数的实现

问题描述 投票:0回答:1

我是编程新手,正在努力弄清楚如何使用简单的哈希函数。

例如,我将下面的代码放在一起以测试RS哈希函数(用C语言编写),并且不断出现段错误。

也许我没有正确实现该函数...我尝试了其他一些简单的哈希函数(例如PJW),也遇到了段错误。

我确实消除了函数的原始参数之一(无符号的int长度)(因为我要完成一个问题集,而我们的哈希函数的规范是它只应使用const字符串作为输入),但是我认为很好,因为我think这个参数是指字符串长度,我可以很容易地在函数内部使用strlen而不是将其传递给函数。我尝试使用valgrind进行调试,但未显示任何内存泄漏。也许我缺少有关如何将外部代码合并到自己的源代码中的一些基本知识。

unsigned int hash(const char *word);

int main(int argc, char *argv[])
{
    // Return error if string name missing from command line
    if (argc != 2)
    {
        printf("Usage: ./recover.c string name\n");
        return 1;
    }
    int i = hash(argv[2]);
    printf("%i\n", i);
}

unsigned int hash(const char *word) // RS Hashing function
{
    unsigned int b = 378551;
    unsigned int a = 63689;
    unsigned int hash = 0;
    unsigned int length = strlen(word);
    unsigned int i = 0;

    for (i = 0; i < length; word++, i++)
    {
        hash = hash * a + (*word);
        a = a * b;
    }

    return hash;
} 

谢谢您的任何见解!知道我要去哪里哪里对真的很有帮助。

c hash hashtable
1个回答
-1
投票

我相信@Mat已经知道了:

分段错误是由于您的argc条件引起的。如果将条件更改为(argc <= 2),将避免分段错误。 (https://onlinegdb.com/r1Udx0lYI

此外,如果您对“简单,非加密散列函数的实现”感兴趣,请访问以下网站:

http://www.cse.yorku.ca/~oz/hash.html

© www.soinside.com 2019 - 2024. All rights reserved.