Strangely, when running "valgrind /usr/bin/xterm" it gives: valgrind: /usr/bin/xterm: Permission denied Whereas when running "valdrind ~/xterm-229/xterm" (i.e. on the one I built from the sources) gives: ==8270== Memcheck, a memory error detector. ==8270== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al. ==8270== Using LibVEX rev 1732, a library for dynamic binary translation. ==8270== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP. ==8270== Using valgrind-3.2.3-Debian, a dynamic binary instrumentation framework . ==8270== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al. ==8270== For more details, rerun with: -v ==8270== ==8270== Syscall param write(buf) points to uninitialised byte(s) ==8270== at 0x65C2D50: write (in /lib/libc-2.6.1.so) ==8270== by 0x5D7E02E: (within /usr/lib/libICE.so.6.3.0) ==8270== by 0x5D81957: _IceWrite (in /usr/lib/libICE.so.6.3.0) ==8270== by 0x5D81A33: IceFlush (in /usr/lib/libICE.so.6.3.0) ==8270== by 0x5943DA6: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x5924528: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x5924F89: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x5925349: _XtAppCreateShell (in /usr/lib/libXt.so.6.0.0) ==8270== by 0x59255A8: XtAppCreateShell (in /usr/lib/libXt.so.6.0.0) ==8270== by 0x5930971: XtOpenApplication (in /usr/lib/libXt.so.6.0.0) ==8270== by 0x41C763: main (main.c:1982) ==8270== Address 0x40A8B7C is 12 bytes inside a block of size 1,024 alloc'd ==8270== at 0x4C20F3F: calloc (vg_replace_malloc.c:279) ==8270== by 0x5D7A40B: IceOpenConnection (in /usr/lib/libICE.so.6.3.0) ==8270== by 0x5B6EBC3: SmcOpenConnection (in /usr/lib/libSM.so.6.0.0) ==8270== by 0x5943B1B: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x594403A: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x5924528: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x5924F89: (within /usr/lib/libXt.so.6.0.0) ==8270== by 0x5925349: _XtAppCreateShell (in /usr/lib/libXt.so.6.0.0) ==8270== by 0x59255A8: XtAppCreateShell (in /usr/lib/libXt.so.6.0.0) ==8270== by 0x5930971: XtOpenApplication (in /usr/lib/libXt.so.6.0.0) ==8270== by 0x41C763: main (main.c:1982) ==8270== ==8270== Invalid read of size 8 ==8270== at 0x4015B3E: (within /lib/ld-2.6.1.so) ==8270== by 0x400A8F7: (within /lib/ld-2.6.1.so) ==8270== by 0x4006174: (within /lib/ld-2.6.1.so) ==8270== by 0x40085F7: (within /lib/ld-2.6.1.so) ==8270== by 0x4011C98: (within /lib/ld-2.6.1.so) ==8270== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8270== by 0x401155A: (within /lib/ld-2.6.1.so) ==8270== by 0x7732F8A: (within /lib/libdl-2.6.1.so) ==8270== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8270== by 0x77334EC: (within /lib/libdl-2.6.1.so) ==8270== by 0x7732EF0: dlopen (in /lib/libdl-2.6.1.so) ==8270== by 0x5FB5B9C: (within /usr/lib/libX11.so.6.2.0) ==8270== Address 0x40C3D38 is 24 bytes inside a block of size 25 alloc'd ==8270== at 0x4C21C16: malloc (vg_replace_malloc.c:149) ==8270== by 0x4008AF5: (within /lib/ld-2.6.1.so) ==8270== by 0x4011C98: (within /lib/ld-2.6.1.so) ==8270== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8270== by 0x401155A: (within /lib/ld-2.6.1.so) ==8270== by 0x7732F8A: (within /lib/libdl-2.6.1.so) ==8270== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8270== by 0x77334EC: (within /lib/libdl-2.6.1.so) ==8270== by 0x7732EF0: dlopen (in /lib/libdl-2.6.1.so) ==8270== by 0x5FB5B9C: (within /usr/lib/libX11.so.6.2.0) ==8270== by 0x5FB61B3: XCreateGlyphCursor (in /usr/lib/libX11.so.6.2.0) ==8270== by 0x5FB65F0: XCreateFontCursor (in /usr/lib/libX11.so.6.2.0) ==8271== Warning: invalid file descriptor -1 in syscall close() ==8271== ==8271== Invalid read of size 8 ==8271== at 0x4015B24: (within /lib/ld-2.6.1.so) ==8271== by 0x400A8F7: (within /lib/ld-2.6.1.so) ==8271== by 0x4006174: (within /lib/ld-2.6.1.so) ==8271== by 0x40085F7: (within /lib/ld-2.6.1.so) ==8271== by 0x400BB6C: (within /lib/ld-2.6.1.so) ==8271== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8271== by 0x400C239: (within /lib/ld-2.6.1.so) ==8271== by 0x4011CF8: (within /lib/ld-2.6.1.so) ==8271== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8271== by 0x401155A: (within /lib/ld-2.6.1.so) ==8271== by 0x66064FF: (within /lib/libc-2.6.1.so) ==8271== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8271== Address 0x8154FC8 is 16 bytes inside a block of size 17 alloc'd ==8271== at 0x4C21C16: malloc (vg_replace_malloc.c:149) ==8271== by 0x4008AF5: (within /lib/ld-2.6.1.so) ==8271== by 0x400BB6C: (within /lib/ld-2.6.1.so) ==8271== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8271== by 0x400C239: (within /lib/ld-2.6.1.so) ==8271== by 0x4011CF8: (within /lib/ld-2.6.1.so) ==8271== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8271== by 0x401155A: (within /lib/ld-2.6.1.so) ==8271== by 0x66064FF: (within /lib/libc-2.6.1.so) ==8271== by 0x400DA05: (within /lib/ld-2.6.1.so) ==8271== by 0x6606666: __libc_dlopen_mode (in /lib/libc-2.6.1.so) ==8271== by 0x65E0F1C: __nss_lookup_function (in /lib/libc-2.6.1.so) ==8270== ==8270== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 8 from 1) ==8270== malloc/free: in use at exit: 36,595,285 bytes in 2,728 blocks. ==8270== malloc/free: 11,779 allocs, 9,051 frees, 38,267,600 bytes allocated. ==8270== For counts of detected errors, rerun with: -v ==8270== searching for pointers to 2,728 not-freed blocks. ==8270== checked 36,924,424 bytes. ==8270== ==8270== LEAK SUMMARY: ==8270== definitely lost: 128 bytes in 1 blocks. ==8270== possibly lost: 0 bytes in 0 blocks. ==8270== still reachable: 36,595,157 bytes in 2,727 blocks. ==8270== suppressed: 0 bytes in 0 blocks. ==8270== Rerun with --leak-check=full to see details of leaked memory. The beginning of this ("param write(buf) points to uninitialised byte(s)") looks suspicious.