sign in | join about | help | sitemap
Connecting Tech Pros Worldwide
varnie's Avatar

boost::pool_allocator: can't find my errors


Question posted by: varnie (Newbie) on August 17th, 2008 12:15 PM
hell-o !~

i faced weird problem during usage boost::pool_allocator.
after i've changed:
Expand|Select|Wrap|Line Numbers
  1. typedef boost::shared_ptr< param > ParamPtr;
  2. typedef std::vector< ParamPtr > ParamPtrVector;

with:
Expand|Select|Wrap|Line Numbers
  1. typedef boost::shared_ptr< param > ParamPtr;
  2. typedef std::vector< ParamPtr, boost::pool_allocator<ParamPtr> > ParamPtrVector;
smth goes wrong:
Quote:
Originally Posted by
Segmentation fault: 11 (core dumped)

before that i didn't get any sever errors...

i've found out where it breaks in my code:
Expand|Select|Wrap|Line Numbers
  1. class UsersFunction : public Function {
  2.     boost::shared_ptr< Statement > _pStmtPtr; //body of function   
  3. public:
  4.     UsersFunction(const Function::FunctionHeader &header, const boost::shared_ptr< Statement > &pStmtPtr = boost::shared_ptr<Statement>())
  5.             : Function(header),
  6.             _pStmtPtr(pStmtPtr) {} HERE !!!
  7.     //...
  8. };
  9.  
  10. //parent class
  11. class Function {
  12.     Value _result;
  13. public:
  14.     struct FunctionHeader {
  15.         std::string _name;
  16.         Value::E_TYPE _returnType;
  17.         std::size_t _argsCount;
  18.         ParamPtrVector _params;
  19.         FunctionHeader(const std::string &name, const Value::E_TYPE returnType, const std::size_t argsCount, const ParamPtrVector &params)
  20.                 :_name(name), _returnType(returnType), _argsCount(argsCount), _params(params) {}
  21.  
  22.         //...
  23.     };
  24. protected:
  25.     FunctionHeader _header;
  26. protected:
  27.     Function(const FunctionHeader &header)
  28.             :_header(header),
  29.             _result(header.getType()) {}
  30.     ~Function() {}
  31.     Function &operator=(const Function &other) {
  32.         if (this != &other) {
  33.             _header = other._header;
  34.         }
  35.         return *this;
  36.     }
  37. public:
  38.  
  39.     //...
  40. };


smth goes wrong in boost simple_segregated_storage.hpp function:
Expand|Select|Wrap|Line Numbers
  1. //boost/simple_segregated_storage.hpp file
  2. template <typename SizeType>
  3. void * simple_segregated_storage<SizeType>::segregate(
  4.     void * const block,
  5.     const size_type sz,
  6.     const size_type partition_sz,
  7.     void * const end)
  8. {
  9.   // Get pointer to last valid chunk, preventing overflow on size calculations
  10.   //  The division followed by the multiplication just makes sure that
  11.   //    old == block + partition_sz * i, for some integer i, even if the
  12.   //    block size (sz) is not a multiple of the partition size.
  13.   char * old = static_cast<char *>(block)
  14.       + ((sz - partition_sz) / partition_sz) * partition_sz;
  15.  
  16.   // Set it to point to the end
  17.   nextof(old) = end;
  18.  
  19.   // Handle border case where sz == partition_sz (i.e., we're handling an array
  20.   //  of 1 element)
  21.   if (old == block)
  22.     return block;
  23.  
  24.   // Iterate backwards, building a singly-linked list of pointers
  25.   for (char * iter = old - partition_sz; iter != block;
  26.       old = iter, iter -= partition_sz)
  27.     nextof(iter) = old;   HERE !!!
  28.  
  29.   // Point the first pointer, too
  30.   nextof(block) = old;
  31.  
  32.   return block;
  33. }

here is my stack on this moment:
Quote:
Originally Posted by
iter = 0x282ffff8 <error reading address 0x282ffff8: Bad address>
0x0805b0f8 boost::simple_segregated_storage<unsigned int>::segregate
0x0805b158 boost::simple_segregated_storage<unsigned int>::add_block
0x0805b352 boost::simple_segregated_storage<unsigned int>::add_ordered_block
0x0805b3cc boost::simple_segregated_storage<unsigned int>::ordered_free_n
0x0805b443 boost::pool<boost::default_user_allocator_new_delete>::ordered_free
0x0807c04c boost::singleton_pool<boost::pool_allocator_tag,8,boost::default_user_al locator_new_delete,boost::detail::pool::pthred_mut ex,32>::ordered_free
0x0807c078 boost::pool_allocator<boost::shared_ptr<param>,boost::default_user_allocator_new_delete,boost::d etails::pool:pthread_mutex,32::deallocate
0x0807c09e std::_Vector_base<boost::shared_ptr<param>,boost::pool_allocator<boost::shared_ptr<param>,boost::default_user_allocator_new_delete,boost::d etails::pool::pthread_mutex,32> >::_M_deallocate
0x0807c3a6 ~_Vector_base
0x0807c562 ~vector
0x0807c5a5 ~FunctionHeader
0x0806f170 Syntaxer::FunctionsDeclarations
0x0806fe17 Syntaxer::run
0x0804a796 main

what is wrong with my code and where's my fault? thanks.
0 Answers Posted
Reply
Not the answer you were looking for? Post your question . . .
197,039 members ready to help you find a solution.
Join Bytes.com

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 197,039 network members.
Post your question now . . .
It's fast and it's free

Popular Articles

Top C / C++ Contributors