Я новичок в программировании и пытаюсь понять, как использовать простые функции 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;
}
Заранее благодарим вас за понимание! Было бы очень полезно узнать, где я иду не так.