编译哈希算法时出现内存访问冲突错误

时间:2018-12-26 19:29:30

标签: c++ arrays string-hashing

将字符串插入内存时出现错误。 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)]++;
}   
}

1 个答案:

答案 0 :(得分:2)

您没有任何将FNVHash返回的值限制为words使用的索引范围的任何方法。 FNVHash需要确保哈希值在[0..NAX]范围内,或者用户(insert)必须这样做。