| 1 | #include <string> |
| 2 | #include <map> |
| 3 | |
| 4 | #define intint_map std::multimap<int, int> |
| 5 | #define strint_map std::multimap<std::string, int> |
| 6 | #define intstr_map std::multimap<int, std::string> |
| 7 | #define strstr_map std::multimap<std::string, std::string> |
| 8 | |
| 9 | int g_the_foo = 0; |
| 10 | |
| 11 | int thefoo_rw(int arg = 1) |
| 12 | { |
| 13 | if (arg < 0) |
| 14 | arg = 0; |
| 15 | if (!arg) |
| 16 | arg = 1; |
| 17 | g_the_foo += arg; |
| 18 | return g_the_foo; |
| 19 | } |
| 20 | |
| 21 | int main() |
| 22 | { |
| 23 | char buffer[sizeof(intint_map)] = {0}; |
| 24 | intint_map &corrupt_map = *(intint_map *)buffer; |
| 25 | |
| 26 | intint_map ii; // Set break point at this line. |
| 27 | |
| 28 | ii.emplace(args: 0,args: 0); // Set break point at this line. |
| 29 | ii.emplace(args: 1,args: 1); |
| 30 | thefoo_rw(arg: 1); // Set break point at this line. |
| 31 | ii.emplace(args: 2,args: 0); |
| 32 | ii.emplace(args: 3,args: 1); |
| 33 | thefoo_rw(arg: 1); // Set break point at this line. |
| 34 | ii.emplace(args: 4,args: 0); |
| 35 | ii.emplace(args: 5,args: 1); |
| 36 | ii.emplace(args: 6,args: 0); |
| 37 | ii.emplace(args: 7,args: 1); |
| 38 | thefoo_rw(arg: 1); // Set break point at this line. |
| 39 | ii.emplace(args: 85,args: 1234567); |
| 40 | |
| 41 | ii.clear(); |
| 42 | |
| 43 | strint_map si; |
| 44 | thefoo_rw(arg: 1); // Set break point at this line. |
| 45 | |
| 46 | si.emplace(args: "zero" ,args: 0); |
| 47 | thefoo_rw(arg: 1); // Set break point at this line. |
| 48 | si.emplace(args: "one" ,args: 1); |
| 49 | si.emplace(args: "two" ,args: 2); |
| 50 | si.emplace(args: "three" ,args: 3); |
| 51 | thefoo_rw(arg: 1); // Set break point at this line. |
| 52 | si.emplace(args: "four" ,args: 4); |
| 53 | |
| 54 | si.clear(); |
| 55 | thefoo_rw(arg: 1); // Set break point at this line. |
| 56 | |
| 57 | intstr_map is; |
| 58 | thefoo_rw(arg: 1); // Set break point at this line. |
| 59 | is.emplace(args: 85,args: "goofy" ); |
| 60 | is.emplace(args: 1,args: "is" ); |
| 61 | is.emplace(args: 2,args: "smart" ); |
| 62 | is.emplace(args: 3,args: "!!!" ); |
| 63 | thefoo_rw(arg: 1); // Set break point at this line. |
| 64 | |
| 65 | is.clear(); |
| 66 | thefoo_rw(arg: 1); // Set break point at this line. |
| 67 | |
| 68 | strstr_map ss; |
| 69 | thefoo_rw(arg: 1); // Set break point at this line. |
| 70 | |
| 71 | ss.emplace(args: "ciao" ,args: "hello" ); |
| 72 | ss.emplace(args: "casa" ,args: "house" ); |
| 73 | ss.emplace(args: "gatto" ,args: "cat" ); |
| 74 | thefoo_rw(arg: 1); // Set break point at this line. |
| 75 | ss.emplace(args: "a Mac.." ,args: "..is always a Mac!" ); |
| 76 | |
| 77 | ss.clear(); |
| 78 | thefoo_rw(arg: 1); // Set break point at this line. |
| 79 | return 0; |
| 80 | } |
| 81 | |