Boost logo

Boost Users :

Subject: [Boost-users] Boost::interprocess::string problems
From: this_thread (cdail.forums_at_[hidden])
Date: 2010-07-23 09:45:55

Good morning all!

Many thanks in advance to anyone that can help me out with this matter.

I've been doing some work with Boost::Interprocess shared memory lately, and
finding it incredibly useful. I've successfully put interprocess mutexes
(muti?) and vectors to work, but for whatever reason, I can't seem to get
the hang of interprocess strings. I'm sure I'm just missing something
stupidly obvious, and to a degree I already see it but don't know what the
solution is.

For a vector, I know I've got a create a new interprocess allocator which
allocates whatever I want to store using the interprocess segment manager:

typedef boost::interprocess::allocator<Foo,
boost::interprocess::managed_shared_memory::segment_manager> FooAllocator;

Then create a special vector which uses that allocator:

typedef boost::interprocess::vector<Foo, FooAllocator>

This works great, provided I remember to find<FooInterprocessVector> on the
opposite process before accessing the vector during periods when it may have
been modified.

I can't seem to get the hang of strings though. I've looked around online
and can't seem to find an example of how this should be set up, and I can't
get it to accept an allocator. The only way I can seem to typedef one is
something like:

typedef boost::interprocess::string BoostString
 - or -
typedef boost::interprocess::basic_string<char> BoostString;

Using this, so long as I only write a short string to the shared memory,
things work fine, but anything over a few characters quickly clobbers other
data. Has anyone used Interprocess::Strings before and could possibly point
me in the direction I'm going wrong? Thank you all!

View this message in context:
Sent from the Boost - Users mailing list archive at

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at