title: glib: valgrind reporting 'still reachable' blocks after g_strsplit
body: <p>I have a very simple piece of code:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;glib.h&gt;
  
  int main(int argc, char * argv[])
  {
    const char * path = "/a/b/c/d/e/f/g/h/";
    gchar ** parts = NULL;
    int i;
  
    parts = g_strsplit( (const gchar *) path, "/", 0 );
  
    for ( i = 0; parts[i]; i++ ) {
      if (parts[i][0] == '\0') {
        continue;
      }
      printf("part: %s\n", parts[i]);
    }
  
    g_strfreev( parts );
    return 0;
  }
  </code></pre>
  
  <p>However, when I run this code through Valgrind, I get a bunch of 'still reachable' blocks:</p>
  
  <pre><code>==12924== 
  ==12924== HEAP SUMMARY:
  ==12924==     in use at exit: 4,252 bytes in 8 blocks
  ==12924==   total heap usage: 19 allocs, 11 frees, 4,358 bytes allocated
  ==12924== 
  ==12924== 240 bytes in 1 blocks are still reachable in loss record 1 of 6
  ==12924==    at 0x4A04820: memalign (vg_replace_malloc.c:581)
  ==12924==    by 0x4A048D7: posix_memalign (vg_replace_malloc.c:709)
  ==12924==    by 0x36A8255F87: ??? (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825680B: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8257DBD: g_slist_prepend (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825AB15: g_strsplit (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x4005C8: main (strsplit.c:10)
  ==12924== 
  ==12924== 252 bytes in 1 blocks are still reachable in loss record 2 of 6
  ==12924==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
  ==12924==    by 0x36A8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8255742: ??? (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825669D: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8257DBD: g_slist_prepend (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825AB15: g_strsplit (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x4005C8: main (strsplit.c:10)
  ==12924== 
  ==12924== 504 bytes in 1 blocks are still reachable in loss record 3 of 6
  ==12924==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
  ==12924==    by 0x36A8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8255722: ??? (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825669D: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8257DBD: g_slist_prepend (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825AB15: g_strsplit (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x4005C8: main (strsplit.c:10)
  ==12924== 
  ==12924== 504 bytes in 1 blocks are still reachable in loss record 4 of 6
  ==12924==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
  ==12924==    by 0x36A8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825578B: ??? (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825669D: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8257DBD: g_slist_prepend (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825AB15: g_strsplit (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x4005C8: main (strsplit.c:10)
  ==12924== 
  ==12924== 720 bytes in 3 blocks are still reachable in loss record 5 of 6
  ==12924==    at 0x4A04820: memalign (vg_replace_malloc.c:581)
  ==12924==    by 0x4A048D7: posix_memalign (vg_replace_malloc.c:709)
  ==12924==    by 0x36A8255F87: ??? (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8256841: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8257DBD: g_slist_prepend (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825AB15: g_strsplit (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x4005C8: main (strsplit.c:10)
  ==12924== 
  ==12924== 2,032 bytes in 1 blocks are still reachable in loss record 6 of 6
  ==12924==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
  ==12924==    by 0x36A8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8256642: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A8257DBD: g_slist_prepend (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x36A825AB15: g_strsplit (in /lib64/libglib-2.0.so.0.2200.5)
  ==12924==    by 0x4005C8: main (strsplit.c:10)
  ==12924== 
  ==12924== LEAK SUMMARY:
  ==12924==    definitely lost: 0 bytes in 0 blocks
  ==12924==    indirectly lost: 0 bytes in 0 blocks
  ==12924==      possibly lost: 0 bytes in 0 blocks
  ==12924==    still reachable: 4,252 bytes in 8 blocks
  ==12924==         suppressed: 0 bytes in 0 blocks
  ==12924== 
  ==12924== For counts of detected and suppressed errors, rerun with: -v
  ==12924== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)
  </code></pre>
  
  <p>My question is:  did I not clean up properly or are these errors something that can be safely ignored?</p>
  
  <p>Thanks!</p>