$ cat test.cpp #include struct S { unsigned Offset; }; int main() { S s; std::cerr << s.Offset << std::endl; } $ clang++ -g -O0 -o test test.cpp $ valgrind ./test ==31013== Memcheck, a memory error detector ==31013== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==31013== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info ==31013== Command: ./test ==31013== ==31013== Use of uninitialised value of size 8 ==31013== at 0x4F39263: ??? (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x4F3A84C: std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x4F3A9EC: std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x4F465B9: std::ostream& std::ostream::_M_insert(unsigned long) (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x400909: main (test.cpp:9) ==31013== ==31013== Conditional jump or move depends on uninitialised value(s) ==31013== at 0x4F3926F: ??? (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x4F3A84C: std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x4F3A9EC: std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, unsigned long) const (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x4F465B9: std::ostream& std::ostream::_M_insert(unsigned long) (in /usr/lib64/libstdc++.so.6.0.21) ==31013== by 0x400909: main (test.cpp:9) ==31013== 0 ==31013== ==31013== HEAP SUMMARY: ==31013== in use at exit: 72,704 bytes in 1 blocks ==31013== total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated ==31013== ==31013== LEAK SUMMARY: ==31013== definitely lost: 0 bytes in 0 blocks ==31013== indirectly lost: 0 bytes in 0 blocks ==31013== possibly lost: 0 bytes in 0 blocks ==31013== still reachable: 72,704 bytes in 1 blocks ==31013== suppressed: 0 bytes in 0 blocks ==31013== Rerun with --leak-check=full to see details of leaked memory ==31013== ==31013== For counts of detected and suppressed errors, rerun with: -v ==31013== Use --track-origins=yes to see where uninitialised values come from ==31013== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)