Make sure you have the latest version of valgrind.

But it definitely does highlight what could be real problems if you read down 
far enough in the output.

> ==18729== Invalid write of size 8
> ==18729==    at 0x443BEF: initPopPara(population*, 
> std::vector<message_para_to_workersT, 
> std::allocator<message_para_to_workersT> >&, initParaType&, int, int, 
> std::vector<double, std::allocator<double> >&) (main-parallel2.cpp:552)
> ==18729==    by 0x44F12E: main (main-parallel2.cpp:204)
> ==18729==  Address 0x62c9da0 is 0 bytes after a block of size 0 alloc'd
> ==18729==    at 0x4A0666E: operator new(unsigned long) 
> (vg_replace_malloc.c:220)
> ==18729==    by 0x4573E4: void 
> std::__uninitialized_fill_n_aux<message_para_to_workersT*, unsigned long, 
> message_para_to_workersT>(message_para_to_workersT*, unsigned long, 
> message_para_to_workersT const&, __false_type) (new_allocator.h:88)
> ==18729==    by 0x4576CF: void 
> std::__uninitialized_fill_n_a<message_para_to_workersT*, unsigned long, 
> message_para_to_workersT, 
> message_para_to_workersT>(message_para_to_workersT*, unsigned long, 
> message_para_to_workersT const&, std::allocator<message_para_to_workersT>) 
> (stl_uninitialized.h:218)
> ==18729==    by 0x44EE2E: main (stl_vector.h:218)

The above is an invalid read of write of size 8 -- you're essentially writing 
outside of an array. 

Valgrind is showing you the call stack to how it got there.  Looks like you 
new'ed or malloc'ed a block of size 0 and then tried to write something to it.  
Writing to memory that you don't own is a no-no; it can cause Very Bad Things 
to happen.

You should probably investigate this, and the other issues that it is reporting 
(e.g., the next invalid read of size 8).

> ==18729==
> ==18729== Invalid read of size 8
> ==18729==    at 0x44F13A: main (main-parallel2.cpp:208)
> ==18729==  Address 0x62c9d60 is 0 bytes after a block of size 0 alloc'd
> ==18729==    at 0x4A0666E: operator new(unsigned long) 
> (vg_replace_malloc.c:220)
> ==18729==    by 0x45733D: void 
> std::__uninitialized_fill_n_aux<message_para_to_workersT*, unsigned long, 
> message_para_to_workersT>(message_para_to_workersT*, unsigned long, 
> message_para_to_workersT const&, __false_type) (new_allocator.h:88)
> ==18729==    by 0x4576CF: void 
> std::__uninitialized_fill_n_a<message_para_to_workersT*, unsigned long, 
> message_para_to_workersT, 
> message_para_to_workersT>(message_para_to_workersT*, unsigned long, 
> message_para_to_workersT const&, std::allocator<message_para_to_workersT>) 
> (stl_uninitialized.h:218)
> ==18729==    by 0x44EE2E: main (stl_vector.h:218)
> ==18729==
> 
> valgrind: m_mallocfree.c:225 (mk_plain_bszB): Assertion 'bszB != 0' failed.
> valgrind: This is probably caused by your program erroneously writing past the
> end of a heap block and corrupting heap metadata.  If you fix any
> invalid writes reported by Memcheck, this assertion failure will
> 
> probably go away.  Please try that before reporting this as a bug.
> 
> ==18729==    at 0x38029D5C: report_and_quit (m_libcassert.c:145)
> ==18729==    by 0x3802A032: vgPlain_assert_fail (m_libcassert.c:217)
> ==18729==    by 0x38035645: vgPlain_arena_malloc (m_mallocfree.c:225)
> ==18729==    by 0x38002BB5: vgMemCheck_new_block (mc_malloc_wrappers.c:199)
> ==18729==    by 0x38002F6B: vgMemCheck___builtin_new 
> (mc_malloc_wrappers.c:246)
> ==18729==    by 0x3806070C: do_client_request (scheduler.c:1362)
> ==18729==    by 0x38061D30: vgPlain_scheduler (scheduler.c:1061)
> ==18729==    by 0x38085E6E: run_a_thread_NORETURN (syswrap-linux.c:91)
> 
> sched status:
>   running_tid=1
> 
> Thread 1: status = VgTs_Runnable
> ==18729==    at 0x4A0666E: operator new(unsigned long) 
> (vg_replace_malloc.c:220)
> ==18729==    by 0x464506: __gnu_cxx::new_allocator<int>::allocate(unsigned 
> long, void const*) (new_allocator.h:88)
> ==18729==    by 0x46452E: std::_Vector_base<int, std::allocator<int> 
> >::_M_allocate(unsigned long) (stl_vector.h:127)
> ==18729==    by 0x464560: std::_Vector_base<int, std::allocator<int> 
> >::_Vector_base(unsigned long, std::allocator<int> const&) (stl_vector.h:113)
> ==18729==    by 0x464B6A: std::vector<int, std::allocator<int> 
> >::vector(unsigned long, int const&, std::allocator<int> const&) 
> (stl_vector.h:216)
> ==18729==    by 0x488F62: Index::Index() (index.cpp:20)
> ==18729==    by 0x489147: ReadFile(char const*) (index.cpp:86)
> ==18729==    by 0x48941C: ImportIndices() (index.cpp:121)
> ==18729==    by 0x445D00: myNeplanTaskScheduler(CNSGA2*, int, int, int, 
> population*, char, int, std::vector<message_para_to_workersT, 
> std::allocator<message_para_to_workersT> >&, ompi_datatype_t*, int&, int&, 
> std::vector<std::vector<double, std::allocator<double> >, 
> std::allocator<std::vector<double, std::allocator<double> > > >&, 
> std::vector<std::vector<double, std::allocator<double> >, 
> std::allocator<std::vector<double, std::allocator<double> > > >&, 
> std::vector<double, std::allocator<double> >&, int, 
> std::vector<std::vector<double, std::allocator<double> >, 
> std::allocator<std::vector<double, std::allocator<double> > > >&, 
> ompi_datatype_t*, int, ompi_datatype_t*, int) (myNetplanScheduler.cpp:109)
> ==18729==    by 0x44F2DF: main (main-parallel2.cpp:216)

-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to