title: I don't understand why I get this valgrind error
body: <p>I got the following code:</p>
  
  <pre><code>/* main.c */
  
  #include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  #include &lt;stdlib.h&gt;
  
  int main (){
    int i;
    char *msg = "This is a simple and small message";
    int len = strlen (msg);
    char *new_msg = (char *) malloc (len);
    for (i = 0; i &lt; len; i++)
      new_msg[i] = 'A';
    printf ("%s\n", new_msg);
    free (new_msg);
    return 0;
  }
  </code></pre>
  
  <p>I compiled it and then run it using valgrind with this command:</p>
  
  <pre><code>valgrind --leak-check=full --show-reachable=yes ./main
  </code></pre>
  
  <p>I got the this output:</p>
  
  <pre><code>==8286== Memcheck, a memory error detector
  ==8286== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
  ==8286== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
  ==8286== Command: ./main
  ==8286== 
  ==8286== Invalid read of size 1
  ==8286==    at 0x4C2C1B4: strlen (vg_replace_strmem.c:412)
  ==8286==    by 0x4EA09FB: puts (ioputs.c:36)
  ==8286==    by 0x400636: main (main.c:12)
  ==8286==  Address 0x51de062 is 0 bytes after a block of size 34 alloc'd
  ==8286==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
  ==8286==    by 0x400601: main (main.c:9)
  ==8286== 
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  ==8286== 
  ==8286== HEAP SUMMARY:
  ==8286==     in use at exit: 0 bytes in 0 blocks
  ==8286==   total heap usage: 1 allocs, 1 frees, 34 bytes allocated
  ==8286== 
  ==8286== All heap blocks were freed -- no leaks are possible
  ==8286== 
  ==8286== For counts of detected and suppressed errors, rerun with: -v
  ==8286== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
  </code></pre>
  
  <p>I see that all the allocated memory was released, but I still get an error that I don't understand.</p>
  
  <p>Appreciate the help.</p>