memory access violation error while compiling hashing algorithm

0

I am getting error while inserting strings to memory. 0xC0000005 access violation error.I tried to change my array size which cause to bad allocation. int main part is only sending string words to insert function until file ends.

#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)]++;
}   
}
c++
arrays
string-hashing
asked on Stack Overflow Dec 26, 2018 by J.Sou

1 Answer

2

You don't have anything to limit the value returned by FNVHash to the range of indexes used by words. Either FNVHash needs to ensure the hash is within the range [0..NAX] or the user (insert) needs to do so.

answered on Stack Overflow Dec 26, 2018 by 1201ProgramAlarm

User contributions licensed under CC BY-SA 3.0