在多线程环境中使用boost :: shared_ptr时内存损坏

时间:2010-08-03 12:52:45

标签: c++ multithreading memory boost

*检测到glibc * malloc():内存损坏(快速):***

这是我在多线程环境中执行此部分代码时遇到的错误:

/// 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! */
    ...
}

你能帮我吗?

2 个答案:

答案 0 :(得分:6)

我不知道这是否有助于您解决具体问题,但有时需要使用make_shared并避免使用new

这样:

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

此外,您可以尝试std::shared_ptr而不是boost::shared_ptr。他们可能完全相同,但也许不是?要通过TR1使用它,我相信你#include <tr1/memory>。我通常只是通过C ++ 0x使用它,在这种情况下它是#include <memory>并将-std=c++0x添加到你的g ++标志。

答案 1 :(得分:2)

这可能是Object的一个问题。如果将Object更改为int会发生什么?