| #include <string> |
| #include <unordered_map> |
| #include <unordered_set> |
| |
| int g_the_foo = 0; |
| |
| int thefoo_rw(int arg = 1) { |
| if (arg < 0) |
| arg = 0; |
| if (!arg) |
| arg = 1; |
| g_the_foo += arg; |
| return g_the_foo; |
| } |
| |
| int main() { |
| |
| char buffer[sizeof(std::unordered_map<int, std::string>)] = {0}; |
| std::unordered_map<int, std::string> &corrupt_map = *(std::unordered_map<int, std::string> *)buffer; |
| |
| std::unordered_map<int, std::string> map; // Set break point at this line. |
| map.emplace(1, "hello"); |
| map.emplace(2, "world"); |
| map.emplace(3, "this"); |
| map.emplace(4, "is"); |
| map.emplace(5, "me"); |
| thefoo_rw(); // Set break point at this line. |
| |
| std::unordered_multimap<int, std::string> mmap; |
| mmap.emplace(1, "hello"); |
| mmap.emplace(2, "hello"); |
| mmap.emplace(2, "world"); |
| mmap.emplace(3, "this"); |
| mmap.emplace(3, "this"); |
| mmap.emplace(3, "this"); |
| thefoo_rw(); // Set break point at this line. |
| |
| std::unordered_set<int> iset; |
| iset.emplace(1); |
| iset.emplace(2); |
| iset.emplace(3); |
| iset.emplace(4); |
| iset.emplace(5); |
| thefoo_rw(); // Set break point at this line. |
| |
| std::unordered_set<std::string> sset; |
| sset.emplace("hello"); |
| sset.emplace("world"); |
| sset.emplace("this"); |
| sset.emplace("is"); |
| sset.emplace("me"); |
| thefoo_rw(); // Set break point at this line. |
| |
| std::unordered_multiset<int> imset; |
| imset.emplace(1); |
| imset.emplace(2); |
| imset.emplace(2); |
| imset.emplace(3); |
| imset.emplace(3); |
| imset.emplace(3); |
| thefoo_rw(); // Set break point at this line. |
| |
| std::unordered_multiset<std::string> smset; |
| smset.emplace("hello"); |
| smset.emplace("world"); |
| smset.emplace("world"); |
| smset.emplace("is"); |
| smset.emplace("is"); |
| thefoo_rw(); // Set break point at this line. |
| |
| return 0; |
| } |