Реализация простых, не криптографических c га sh функций - PullRequest
0 голосов
/ 24 апреля 2020

Я новичок в программировании и пытаюсь понять, как использовать простые функции ha sh.

Например, я собрал приведенный ниже код для проверки функции хеширования RS (в C), и я продолжаю получать segfault.

Возможно, я неправильно внедряю функцию ... Я пробовал несколько других простых функций ha sh (например, PJW), а также получил ошибки по умолчанию.

Я исключил один из исходных параметров функции (длина без знака int) (потому что я заканчиваю набор задач и спецификация для нашей функции ha sh состоит в том, что она должна принимать только константную строку в качестве входных данных ), но я подумал, что это будет хорошо, так как я думаю , что этот параметр относится к длине строки, которую я легко могу получить, используя 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;
} 

Заранее благодарим вас за понимание! Было бы очень полезно узнать, где я иду не так.

1 Ответ

0 голосов
/ 24 апреля 2020

Я думаю, что @Mat уже получил его:

Ошибка сегментации связана с вашим состоянием arg c. Если вы измените условие на (arg c <= 2), вы избежите ошибки сегментации. (<a href="https://onlinegdb.com/r1Udx0lYI" rel="nofollow noreferrer">https://onlinegdb.com/r1Udx0lYI)

Кроме того, если вас интересует «Реализация простых, не криптографических c га sh функций», я приглашаю вас взглянуть на следующем веб-сайте:

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

...