1

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;
}
4

3 に答える 3

1

hash_otptは何も指すポインターではありませんが、この関数は、出力をこのメモリに書き込むときに、4 番目の引数が何らかのメモリへのポインターであることを期待しています。あなたの例では、書き込み操作を試みますが、失敗します(ポインターが初期化されていないため、書き込み先がありません)。これにより、SegmentationFault が発生します。

ハッシュが適合する s の数uint64_tを計算し (2、出力のサイズは 128 ビットで、a のサイズuint64_tは 64 ビットであるため)、メモリを割り当てます。

hash_otpt = new uint64_t [2];
于 2016-08-19T11:12:43.747 に答える