ошибка нарушения доступа к памяти при компиляции алгоритма хеширования

Я получаю сообщение об ошибке при вставке строк в память.
Ошибка нарушения прав доступа 0xC0000005. Я попытался изменить размер массива, что привело к неправильному распределению.
Основная часть int отправляет только строковые слова для вставки функции до конца файла.

#include<string>
#include<iostream>
#include <fstream>
using namespace std;
const unsigned int MAX = INT16_MAX;
string *words = new string[MAX];
int* instances = new int[MAX];

//int* alloc = new int[MAX];
int ucounts = 0;

static unsigned int FNVHash(string str) {
const unsigned int fnv_prime = 0x811C9DC5;
unsigned int hash = 0;
unsigned int i = 0;
unsigned int len = str.length();

for (i = 0; i < len; i++)
{
hash *= fnv_prime;
hash ^= (str[i]);
}

return hash;
}

void insert(string input) {
//check first, add if not present

if (words[FNVHash(input)] != input) {  //<-Compiler shows error here.
words[FNVHash(input)] = input;
instances[FNVHash(input)]=1;
ucounts++;
}
else {

instances[FNVHash(input)]++;
}
}

0

Решение

У вас нет ничего, чтобы ограничить значение, возвращаемое FNVHash к диапазону индексов, используемых words, Или FNVHash необходимо убедиться, что хеш находится в диапазоне [0..NAX] или пользователя (insert) должен сделать это.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]