我对应该为MurmurHash3_x86_128()提供哪些参数感到困惑。murmurhash3代码可以找到https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp。方法定义如下。
void MurmurHash3_x86_128 ( const void * key, const int len,
uint32_t seed, void * out )我在上面的方法中传递了以下值,但是我的编译器给了我分段错误。我做错什么了?
int main()
{
uint64_t seed = 1;
uint64_t *hash_otpt;
const char *key = "hi";
MurmurHash3_x64_128(key, (uint64_t)strlen(key), seed, hash_otpt);
cout << "hashed" << hash_otpt << endl;
return 0;
}发布于 2016-08-19 11:20:09
这个函数把它的散列放在128位内存中。
您要做的是传递一个指针,该指针尚未分配给它。
正确的用法应该是这样的:
int main()
{
uint64_t seed = 1;
uint64_t hash_otpt[2]; // allocate 128 bits
const char *key = "hi";
MurmurHash3_x64_128(key, (uint64_t)strlen(key), seed, hash_otpt);
cout << "hashed" << hash_otpt[0] << hash_otpt[1] << endl;
return 0;
}您可能已经注意到,通过分析MurmurHash3_x86_128如何填充out参数:
((uint64_t*)out)[0] = h1;
((uint64_t*)out)[1] = h2;发布于 2016-08-19 11:12:43
hash_otpt是一个指向任何东西的指针,但是函数期望第四个参数是指向某个内存的指针,因为它将其输出写入这个内存中。在您的示例中,它尝试写操作,但是失败了(因为指针没有初始化,所以没有地方可以写入)。这给了你一个SegmentationFault。
计算出哈希值适合多少个uint64_t (2,因为输出的大小为128位,uint64_t的大小为64位),并分配内存:
hash_otpt = new uint64_t [2];发布于 2016-08-19 11:19:55
如果你看看文献资料,你可以看到
MurmurHash3_x64_128 ...它有128位的输出.
所以,您的代码可以是这样的
uint64_t hash_otpt[2]; // This is 128 bits
MurmurHash3_x64_128(key, (uint64_t)strlen(key), seed, hash_otpt);请注意,您根本不必动态分配输出。
https://stackoverflow.com/questions/39037577
复制相似问题