#include <iostream> class HashMap { int c; int s; struct Node { char x; Node* next; }; Node* a; public: HashMap() { int c = 10; int s = 0; Node* a = new Node[c]; for(int i = 0; i != c; ++i) { a[i].x = 0; a[i].next = NULL; } } HashMap(int x) { int c = x; int s = 0; Node* a = new Node[c]; for(int i = 0; i != c; ++i) { a[i].x = 0; a[i].next = NULL; } } ~HashMap() { clear(); c = 0; Node* tmp = a; delete[] tmp; a = NULL; } HashMap(const HashMap& src) { c = src.c; s = src.s; a = new Node[c]; for(int i = 0; i != c; ++i) { a[i].x = src.a[i].x; a[i].next = src.a[i].next; } } HashMap& operator=(const HashMap& src) { if(&src==this) { return *this; } else { c = src.c; s = src.s; a = new Node[c]; for(int i = 0; i != c; ++i) { a[i].x = src.a[i].x; a[i].next = src.a[i].next; } } } int hash(int key) { return (key % c); } bool insert(int key, char value); bool remove(int key, char& value); void clear(); bool is_empty() { return (s==0) ? true : false; } std::size_t capacity() { return c; } std::size_t size() { return s; } double load(); std::ostream& print(std::ostream& out); }; bool HashMap::insert(int key, char value) { if(s==c) return false; int k = hash(key); if(a[k].x == 0) { ++s; } a[k].x = value; return true; } bool HashMap::remove(int key, char& value) { int k = hash(key); if(is_empty() || (a[k].x==0)) return false; value = a[k].x; --s; a[k].x = 0; return true; } void HashMap::clear() { for(int i = 0; i != c; ++i) a[i].x = 0; int s = 0; } double HashMap::load() { double l = 0; int r = 0; for(int i = 0; i != c; ++i) { if(a[i].next != NULL) ++r; } r+= s; l = r/c; return l; } std::ostream& HashMap::print(std::ostream& out) { if(is_empty()) { out << "<empty list>"; } else { out << "[ "; for(int i = 0; i != (c-1); ++i) { if(a[i].x != 0) out << a[i].x; if(a[i].x == 0) out << "--"; out << " : "; } if(a[c-1].x != 0) out << a[c-1].x; if(a[c-1].x == 0) out << "--"; out << " ]"; } out << std::endl; return out; } int main() { HashMap h; std::cout << std::boolalpha << h.is_empty() << std::endl; //std::cout << "Hello World" << std::endl; return 0; }
Standard input is empty
false
*** Error in `./prog': free(): invalid pointer: 0xb761dff4 *** ======= Backtrace: ========= /lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x75e72)[0xb74e7e72] /lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x76bb0)[0xb74e8bb0] /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb76ca82f] /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdaPv+0x1b)[0xb76ca87b] ./prog[0x8048d53] ./prog[0x804890b] /lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xf5)[0xb748b8f5] ./prog[0x8048981] ======= Memory map: ======== 08048000-0804a000 r-xp 00000000 08:03 1295714 /home/dJIHEh/prog 0804a000-0804b000 rw-p 00001000 08:03 1295714 /home/dJIHEh/prog 0947b000-0949c000 rw-p 00000000 00:00 0 [heap] b7470000-b7472000 rw-p 00000000 00:00 0 b7472000-b761b000 r-xp 00000000 08:03 1303839 /lib/i386-linux-gnu/i686/cmov/libc-2.17.so b761b000-b761c000 ---p 001a9000 08:03 1303839 /lib/i386-linux-gnu/i686/cmov/libc-2.17.so b761c000-b761e000 r--p 001a9000 08:03 1303839 /lib/i386-linux-gnu/i686/cmov/libc-2.17.so b761e000-b761f000 rw-p 001ab000 08:03 1303839 /lib/i386-linux-gnu/i686/cmov/libc-2.17.so b761f000-b7622000 rw-p 00000000 00:00 0 b7622000-b763d000 r-xp 00000000 08:03 1303883 /lib/i386-linux-gnu/libgcc_s.so.1 b763d000-b763e000 rw-p 0001a000 08:03 1303883 /lib/i386-linux-gnu/libgcc_s.so.1 b763e000-b763f000 rw-p 00000000 00:00 0 b763f000-b7680000 r-xp 00000000 08:03 1303836 /lib/i386-linux-gnu/i686/cmov/libm-2.17.so b7680000-b7681000 r--p 00040000 08:03 1303836 /lib/i386-linux-gnu/i686/cmov/libm-2.17.so b7681000-b7682000 rw-p 00041000 08:03 1303836 /lib/i386-linux-gnu/i686/cmov/libm-2.17.so b7682000-b775e000 r-xp 00000000 08:03 1345926 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18 b775e000-b775f000 ---p 000dc000 08:03 1345926 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18 b775f000-b7763000 r--p 000dc000 08:03 1345926 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18 b7763000-b7764000 rw-p 000e0000 08:03 1345926 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.18 b7764000-b776b000 rw-p 00000000 00:00 0 b776d000-b7771000 rw-p 00000000 00:00 0 b7771000-b7772000 r-xp 00000000 00:00 0 [vdso] b7772000-b7791000 r-xp 00000000 08:03 1303796 /lib/i386-linux-gnu/ld-2.17.so b7791000-b7792000 r--p 0001f000 08:03 1303796 /lib/i386-linux-gnu/ld-2.17.so b7792000-b7793000 rw-p 00020000 08:03 1303796 /lib/i386-linux-gnu/ld-2.17.so bffb3000-bffc8000 rw-p 00000000 00:00 0 [stack]