title: AddressSanitizer: heap-buffer-overflow on address
body: <p>Im trying to write a function to determine if the input string is valid. <br><br>This task is from leetcode, 20th task. So its given like that.<br><br></p>
  
  <pre>Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
  An input string is valid if:
  *Open brackets must be closed by the same type of brackets.
  *Open brackets must be closed in the correct order.
  Note that an empty string is also considered valid.</pre>
  
  <p>My code: </p>
  
  <pre><code>bool isValid(string s) {
          vector&lt;char&gt; str;
          map&lt;char, char&gt; mp;
          mp['{']='}';
          mp['(']=')';
          mp['[']=']';
          for(int i = 0; i &lt; s.length(); i++){
              str.push_back(s[i]);
          }int c = 0;
          while(!str.empty()){
              c++;
              for(int i = 0; i &lt; str.size(); i++){
                  if(str[i+1]==mp[i]){
                      int x = i+1;
                      str.erase(str.begin()+x);
                      str.erase(str.begin()+i);
                      }
              }if(c&gt;str.size()) break;
          }
          if(str.empty()) return true;
          else return false;
      }
  </code></pre>
  
  <p>But every time I get this error:</p>
  
  <pre>=================================================================
  ==32==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000032 at pc 0x00000038767f bp 0x7ffffae90390 sp 0x7ffffae90388
  READ of size 1 at 0x602000000032 thread T0
      #2 0x7fd5e106882f  (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
  0x602000000032 is located 0 bytes to the right of 2-byte region [0x602000000030,0x602000000032)
  allocated by thread T0 here:
      #4 0x7fd5e106882f  (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
  Shadow bytes around the buggy address:
    0x0c047fff7fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0c047fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0c047fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0c047fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0c047fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  =>0x0c047fff8000: fa fa fd fa fa fa[02]fa fa fa fa fa fa fa fa fa
    0x0c047fff8010: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    0x0c047fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    0x0c047fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    0x0c047fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    0x0c047fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  Shadow byte legend (one shadow byte represents 8 application bytes):
    Addressable:           00
    Partially addressable: 01 02 03 04 05 06 07 
    Heap left redzone:       fa
    Freed heap region:       fd
    Stack left redzone:      f1
    Stack mid redzone:       f2
    Stack right redzone:     f3
    Stack after return:      f5
    Stack use after scope:   f8
    Global redzone:          f9
    Global init order:       f6
    Poisoned by user:        f7
    Container overflow:      fc
    Array cookie:            ac
    Intra object redzone:    bb
    ASan internal:           fe
    Left alloca redzone:     ca
    Right alloca redzone:    cb
    Shadow gap:              cc
  ==32==ABORTING</pre>
  
  <p><br>
  Can you explain, whats wrong here, does my solution correct or not?</p>