Opened 13 years ago
Closed 13 years ago
#4066 closed Bugs (invalid)
Boost::Interprocess::vector only pushes back so many correct values before it always pushes 0.
| Reported by: | Owned by: | Ion Gaztañaga | |
|---|---|---|---|
| Milestone: | Boost 1.43.0 | Component: | interprocess |
| Version: | Boost 1.42.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
I was perusing the documentation on interprocess, and I decided to scale up the example a bit to make sure it would suit my purposes.
#include <conio.h> //For getch
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/thread.hpp>
#include <stdio.h>
using namespace boost::interprocess;
//Define an STL compatible allocator of ints that allocates from the managed_shared_memory.
//This allocator will allow placing containers in the segment
typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
//Alias a vector that uses the previous STL-like allocator so that allocates
//its values from the segment
typedef boost::interprocess::vector<int, ShmemAllocator> MyVector;
int main(int argc, char* argv[])
{
struct shm_remove
{
shm_remove() { shared_memory_object::remove("MySharedMemory"); }
~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
} remover;
//Create a new segment with given name and size
managed_shared_memory segment(create_only, "MySharedMemory", 80000);
//Initialize shared memory STL-compatible allocator
const ShmemAllocator alloc_inst (segment.get_segment_manager());
//Construct a vector named "MyVector" in shared memory with argument alloc_inst
MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
myvector->reserve(5000);
for(int i = 0; i < 5000; i++) //Insert data in the vector
myvector->push_back(5);
for(unsigned int i=0; i < myvector->size(); i++)
{
printf("%u: %u\n", i+1, myvector[i]);
}
_getch();
return 0;
}
However, when this code is build/run it outputs the correct value for a while and then suddenly the values switch to 0 or vary widely.
Am I doing something incorrectly, or is this a problem with the lib?
Change History (2)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
That solved the issue. I had thought I tried everything. I guess not!
Thank you very much!
Note:
See TracTickets
for help on using tickets.

In the printf you should be passing (*myvector)[i], not myvector[i]. With that change compiles and runs fine for me printing 5 the whole time on Solaris.