Boost logo

Boost Users :

From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-03-25 12:28:16


AMDG

Joost Meijles wrote:
> Hi All,
>
> I am trying to use the Boost Pool library, more specifically I am trying to use the singleton pool interface.
> Everything seems to work fine, till the moment I use it to create an object from a class containing a (STL) map, which results in a segmentation fault.
> Does anyone know why this happens, or how to work around it?
>
> What I find also strange is that the constructor and destructor of the class doesn't seem to be called when using the pool. Is this normal behavior?
>

Yes.

myPool::malloc does not initialize the MyClass.
You need to do so explicitly.

#include <vector>
#include <map>
#include <boost/pool/singleton_pool.hpp>

using namespace std;

class MyClass {
public:
    int x;
    vector<int> y;
    map<int, int> z;
};

int main() {
   typedef boost::singleton_pool<void, sizeof(MyClass)> myPool;

    MyClass * const t = (MyClass *) myPool::malloc();
    new(t) MyClass;
    t->x = 1;
    t->y.push_back(2);
    t->z.insert(make_pair(3,3));//causes segmentation fault

    t->~MyClass();
 
    myPool::purge_memory();
}

In Christ,
Steven Watanabe


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net