thread problem - incorrect checksum for freed object - object was probably modified after being freed

Hi, I create some boost::threads: std::vector< worker<T,D> > l_worker; boost::thread_group l_threadgroup; for(std::size_t i=0; i < p_threads; ++i) { l_worker.push_back( worker<T,D>(p_iteration, p_stepsize, m_fulltable, m_derivation, m_optimize, m_static, p_batch) ); l_threadgroup.create_thread( boost::bind( &worker<T,D>::optimize, l_worker[i] ) ); } l_threadgroup.join_all(); In the constructor of my worker-object makes a copy of the parameters ( p_iteration = std::size_t, p_stepsize = T (double), p_batch = std::vector and the others are std::map): ... ) : m_iteration( p_iteration ), m_stepsize( p_stepsize ), m_symbols(), m_derivation(), m_initvalues(), m_staticvalues(), m_batch() { std::copy( p_derivation.begin(), p_derivation.end(), std::inserter(m_derivation, m_derivation.begin())); std::copy( p_initvalues.begin(), p_initvalues.end(), std::inserter(m_initvalues, m_initvalues.begin())); std::copy( p_syms.begin(), p_syms.end(), std::inserter(m_symbols, m_symbols.begin())); } in the optimize-method I use this code: GiNaC::exmap l_dynamic; // exmap is == std::map for(typename std::map<std::string, std::pair<T,T> >::iterator it = m_initvalues.begin(); it != m_initvalues.end(); ++it) l_dynamic[ m_symbols[it->first] ] = it->second.first; If I create only one thread, everything works fine. On more thread I'll get main(4398,0xa07ad720) malloc: *** error for object 0xd2b880: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug My idea is to create p_threads number of my worker objects and add some data with the constructor parameters. Than I call the join_all method so every object can work with their own data and after join_all is finished I receive the data from every object. Can someone please explain to me what I did wrong. Thanks Phil
participants (1)
-
Kraus Philipp