title: Why Valgrind producing "invalid free or delete" if I use "realloc()"?
body: <p>While using realloc(), I checked it with valgrind as follows</p>
  
  <pre><code> valgrind --tool=memcheck --leak-check=yes --show-reachable=yes a.out
  </code></pre>
  
  <p>and the error information produced by valgrind is </p>
  
  <pre><code>==6402== Memcheck, a memory error detector.
  ==6402== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
  ==6402== Using LibVEX rev 1575, a library for dynamic binary translation.
  ==6402== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
  ==6402== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
  ==6402== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
  ==6402== For more details, rerun with: -v
  ==6402==
  dinesh
  vignesh
  ==6402== Invalid free() / delete / delete[]
  ==6402==    at 0x4905E12: realloc (vg_replace_malloc.c:306)
  ==6402==    by 0x400539: main (in /user/gur29597/mysourcecode/VMake/a.out)
  ==6402==  Address 0x7FF000830 is on thread 1's stack
  vishwa
  ==6402==
  ==6402== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 4 from 1)
  ==6402== malloc/free: in use at exit: 0 bytes in 0 blocks.
  ==6402== malloc/free: 1 allocs, 1 frees, 3 bytes allocated.
  ==6402== For counts of detected errors, rerun with: -v
  ==6402== All heap blocks were freed -- no leaks are possible.
  </code></pre>
  
  <p>My code is as follows ,</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  
  int main()
  {
    char *name[2];
  
   name[0]="dinesh";
  
   name[1]="vignesh";
  
    printf("%s\n%s\n",name[0],name[1]);
  
    realloc(name,3);
  
    name[2]="vishwa";
  
    printf("%s\n",name[2]);
  
   return 0;
  }
  </code></pre>