Повреждение памяти при использовании boost :: shared_ptr в многопоточной среде - PullRequest
1 голос
/ 03 августа 2010

* обнаружен 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 ]

6 голосов
/ 03 августа 2010

Не знаю, поможет ли это вашей конкретной проблеме, но иногда желательно использовать 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 ++.

2 голосов
/ 03 августа 2010

Вероятно, это проблема с Object.Что произойдет, если вы измените Object на int?

...