数据集只成功插入了一个包,第二个包就发生了段错误。
调用哈希函数,编译后出现了段错误,在Ubuntu下进行gdb的调试,找到了段错误的位置,均是使用或者调用了哈希的文件位置,如下图所示
Program received signal SIGSEGV, Segmentation fault.
0x0000555555556600 in BOBHash32::run (this=0x0, str=0x7ffff12a901d "\222\234\006f~\325\343\334.\335P", len=4) at ../AGCSketch/../common/BOBHash32.h:209
209 c = prime32[this->prime32Num]; /* the previous hash value */
(gdb) bt
#0 0x0000555555556600 in BOBHash32::run (this=0x0, str=0x7ffff12a901d "\222\234\006f~\325\343\334.\335P", len=4) at ../AGCSketch/../common/BOBHash32.h:209
#1 0x00005555555580e5 in Guide_Candidate_Part<460800>::insert (this=0x555555599598, key=0x7ffff12a901d "\222\234\006f~\325\343\334.\335P", f=1) at ../AGCSketch/Guide_Candidate_Part.h:59
#2 0x000055555555773a in AGCSketch<19200, 614400>::insert (this=0x555555573d90, key=0x7ffff12a901d "\222\234\006f~\325\343\334.\335P", f=1) at ../AGCSketch/AGCSketch.h:38
#3 0x0000555555556c81 in main () at AGCSketch.cpp:63
(gdb)
错误其实是连带的,均是由#0 引起的,但是想不到是什么原因导致BOBHash出错了。
考虑其中是否有变量类型不一致?已经修改进行了统一。考虑是否由于指针数组引起的?进行了非法的内存访问?也进行了new的分配内存和释放内存。
想不到还有什么原因导致哈希函数这块错误?希望有人可以帮忙解答一下~