user179476
user179476

Reputation:

Memory corruption when using boost::shared_ptr in a multithreaded environment

* glibc detected * malloc(): memory corruption (fast): ***

This is the error I get when, in a multithreaded environment, I execute this portion of code:

/// Some declarations
typedef boost::shared_ptr<Object> ObjectPtr;

ObjectPtr getObject()
{
    return ObjectPtr(new Object);
}

/// What is actually executed in a thread
void executeWork()
{
    ...
    ObjectPtr object = getObject(); /* <--- Memory corruption here! */
    ...
}

Can you help me please?

Upvotes: 1

Views: 1653

Answers (2)

kenm
kenm

Reputation: 23905

I don't know if this helps your specific problem, but it is sometimes desirable to use make_shared and avoid the new.

so:

return boost::make_shared<Object>(/* any arguments to constructor here */);

Additionally, you could try std::shared_ptr instead of boost::shared_ptr. They're probably exactly the same, but maybe not? To use it via TR1, I believe you #include <tr1/memory>. I usually just use it via C++0x, in which case it's #include <memory> and add -std=c++0x to your g++ flags.

Upvotes: 7

DanDan
DanDan

Reputation: 10562

It's likely to be a problem with Object. What happens if you change Object to int?

Upvotes: 2

Related Questions