繁体   English   中英

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

[英]Memory corruption when using boost::shared_ptr in a multithreaded environment

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

你能帮我吗?

我不知道这是否对您的特定问题有所帮助,但有时最好使用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 ++标志中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM