Hi all, I'm completely stuck..
I have a program which reads integers (there are 65536 integers) from one file, and adds them into the Bloom filter. And then it reads another file (with a larger set of integers), and checks the existence of each element in the Bloom filter created in the first step. Here is the code.
when I compile and run it, GDB says:
And here is the output of backtrace full:
One more thing, I found that it reads up to 371 integers from the first file ('pns), and then segfaults.
Could anyone help me with this problem?
I have a program which reads integers (there are 65536 integers) from one file, and adds them into the Bloom filter. And then it reads another file (with a larger set of integers), and checks the existence of each element in the Bloom filter created in the first step. Here is the code.
Code:
#include <string> #include <iostream> #include <fstream> #include "GeneralHashFunctions.h" #include "falsetest.h" using namespace std; int main() { int outRes=0; bfilter BF(BLOOMFILTER_NUMOFHASH, BLOOMFILTER_BITS_SIZE, &outRes); FILE* pns; pns = fopen ("pns" , "r"); unsigned int key; char buffer[16]; while (!feof(pns)) { fgets (buffer, 16, pns); sscanf (buffer, "%u", &key); BF.addmember((char*) &key, sizeof(key)); } fclose(pns); int counter = 0; int counter2=0; FILE* in_file; in_file = fopen ("list" , "r"); setvbuf (in_file, NULL , _IOFBF , 4096 ); while (!feof(in_file)) { counter2++; fgets (buffer, 16, in_file); sscanf (buffer, "%u", &key); if (BF.isMember((char*) &key, sizeof(key))) counter++; } BF.~bfilter(); cout<<"Positives= "<<counter<<"\n"; cout<<"Total= "<<counter2<<"\n"; cout<<"False positives= "<<counter-65535<<"\n"; fclose(in_file); return 0; }
Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
0x00000000 in ?? ()
(gdb) backtrace full
#0 0x00000000 in ?? ()
No symbol table info available.
#1 0xf7d3f144 in __uflow () from /lib/libc.so.6
No symbol table info available.
#2 0xf7d325b6 in _IO_getline_inf o () from /lib/libc.so.6
No symbol table info available.
#3 0xf7d32501 in _IO_getline () from /lib/libc.so.6
No symbol table info available.
#4 0xf7d313cd in fgets () from /lib/libc.so.6
No symbol table info available.
#5 0x08048d86 in main () at falsetest.cpp:1 6
outRes = 1
BF = {m_bf = 0x804d008 "", m_numHashFns = 3, m_logSize = 18, m_bfBitSize = 262144, m_initialized = 1, byteSize = 1, m_debug = 0}
pns = (FILE *) 0x804d018
key = 3029799107
buffer = "3029799107\n\0 008\215╛Ъ"
counter = 134529012
counter2 = -5468808
in_file = (FILE *) 0x804a0d9
(gdb)
#0 0x00000000 in ?? ()
No symbol table info available.
#1 0xf7d3f144 in __uflow () from /lib/libc.so.6
No symbol table info available.
#2 0xf7d325b6 in _IO_getline_inf o () from /lib/libc.so.6
No symbol table info available.
#3 0xf7d32501 in _IO_getline () from /lib/libc.so.6
No symbol table info available.
#4 0xf7d313cd in fgets () from /lib/libc.so.6
No symbol table info available.
#5 0x08048d86 in main () at falsetest.cpp:1 6
outRes = 1
BF = {m_bf = 0x804d008 "", m_numHashFns = 3, m_logSize = 18, m_bfBitSize = 262144, m_initialized = 1, byteSize = 1, m_debug = 0}
pns = (FILE *) 0x804d018
key = 3029799107
buffer = "3029799107\n\0 008\215╛Ъ"
counter = 134529012
counter2 = -5468808
in_file = (FILE *) 0x804a0d9
(gdb)
Could anyone help me with this problem?
Comment