When I run a test program with leak-check, the first error is
==14820== Use of uninitialised value of size 4
==14820==    at 0x40F6841: (within /usr/lib/libstdc++.so.6.0.10)
==14820==    by 0x40FE394: std::ostreambuf_iterator<char, 
std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, 
std::char_traits<char> > >::_M_insert_int<unsigned 
long>(std::ostreambuf_iterator<char, std::char_tra\
its<char> >, std::ios_base&, char, unsigned long) const (in 
/usr/lib/libstdc++.so.6.0.10)
==14820==    by 0x40FE60C: std::num_put<char, std::ostreambuf_iterator<char, 
std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, 
std::char_traits<char> >, std::ios_base&, char, unsigned long) const (in 
/usr/lib/libstdc++\
.so.6.0.10)
==14820==    by 0x410FEFF: std::ostream& std::ostream::_M_insert<unsigned 
long>(unsigned long) (in /usr/lib/libstdc++.so.6.0.10)
==14820==    by 0x4110073: std::ostream::operator<<(unsigned) (in 
/usr/lib/libstdc++.so.6.0.10)
==14820==    by 0x806903B: 
boost::test_tools::tt_detail::print_log_value<unsigned>::operator()(std::ostream&,
 unsigned const&) (test_tools.hpp:299)
==14820==    by 0x806905E: std::ostream& 
boost::test_tools::tt_detail::operator<< <unsigned>(std::ostream&, 
boost::test_tools::tt_detail::print_helper_t<unsigned> const&) 
(test_tools.hpp:405)
==14820==    by 0x8069085: boost::basic_wrap_stringstream<char>& 
boost::operator<< <char, boost::test_tools::tt_detail::print_helper_t<unsigned> 
>(boost::basic_wrap_stringstream<char>&, 
boost::test_tools::tt_detail::print_helper_t<uns\
igned> const&) (wrap_stringstream.hpp:66)
==14820==    by 0x8069EE8: void 
boost::test_tools::tt_detail::check_frwd<boost::test_tools::tt_detail::equal_impl_frwd,
 unsigned, unsigned>(boost::test_tools::tt_detail::equal_impl_frwd, 
boost::basic_wrap_stringstream<char>&, boost::u\
nit_test::basic_cstring<char const>, unsigned, 
boost::test_tools::tt_detail::tool_level, 
boost::test_tools::tt_detail::check_type, unsigned const&, char const*, 
unsigned const&, char const) (test_tools.hpp:461)
==14820==    by 0x810E4DA: data::test_method() (Data_test.cc:133)
==14820==    by 0x810EE7B: _ZL12data_invokerv (Data_test.cc:40)
==14820==    by 0x807BC1A: boost::unit_test::ut_detail::unused 
boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void
 (*)()>(void (*)()&) (callback.hpp:56)
==14820==    by 0x807BC44: 
boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused,
 void (*)()>::invoke() (callback.hpp:89)
==14820==    by 0x406765C: (within 
/usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==    by 0x40561B4: 
boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> 
const&, bool, int) (in 
/usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==    by 0x4056545: 
boost::execution_monitor::execute(boost::unit_test::callback0<int> const&, 
bool, int) (in /usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==    by 0x40677B8: 
boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case
 const&) (in /usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==    by 0x405AC3E: 
boost::unit_test::framework_impl::visit(boost::unit_test::test_case const&) (in 
/usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==    by 0x406DE66: 
boost::unit_test::traverse_test_tree(boost::unit_test::test_case const&, 
boost::unit_test::test_tree_visitor&) (in 
/usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==    by 0x406E63F: boost::unit_test::traverse_test_tree(unsigned long, 
boost::unit_test::test_tree_visitor&) (in 
/usr/lib/libboost_unit_test_framework-gcc42-1_34_1.so.1.34.1)
==14820==
==14820== Conditional jump or move depends on uninitialised value(s)
==14820==    at 0x40F684A: (within /usr/lib/libstdc++.so.6.0.10)

Data_test.cc excerpt
  BOOST_CHECK_EQUAL(pdi4->next(), true);
  Data::TIObs p4b = pdi4->begin();
  //p4b = 2u;
  Data::TIObs p4bt = 0u;
  BOOST_CHECK_EQUAL(p4b, p4bt); // line 133 triggering error

First question: why isn't it telling me where the uninitialised value is?  Or 
is it?  My understanding is that
the first at (0x40F6841) is the instruction location, not the memory being 
referenced.

It may be relevant that I invoked with 
valgrind --leak-check=yes --num-callers=20 ./test1 --report_level=detailed 
/home/ross/peter/R/mspath/src/test/inputs
Does --num-callers disable other information?  I couldn't find a switch that 
would enable reporting of the offending memory location.

Second question: why is the error reported in the equality test, and not at
  Data::TIObs p4b = pdi4->begin();
?  By uncommenting p4b = 2u I was able to suppress the error, which seems to 
indicate that p4b is the culprit.
Data:TIObs is type size_t.

The program is compiled with g++ 4.3.2 with -O0 -g, valgrind 3.3.1 on Debian 
GNU/Linux Lenny with 32 bit AMD Athlon chip.



------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to