2011-09-21 36 views
0

創建自定義內存分配器像以下:C/C++自定義分配器存儲器泄漏

class pool_allocator 
{ 
    // required methods 
    // ... 
private: 
    boost::shared_ptr<MemoryChunks> m_t; 
}; 

這個分配器的目的是共享存儲器由不同的容器中分配,僅解除分配它們當所有容器和刪除。因此,我使用boost::shared_ptr

但是,在VS2008中運行它之後,我檢測到內存泄漏。我不知道爲什麼。

如果我將boost::shared_ptr更改爲MemoryChunks,則內存泄漏消失。

+0

MemoryChunks就像一個Chunk數組,每個塊包含一個對象數組,並且ptr指向下一個空閒對象。由於除非塊被刪除,否則永遠不會釋放對象。分配/空閒意味着O(1)。當內存塊被刪除時,它將釋放所有的塊。 –

+0

你最好發佈'MemoryChunk'的定義,並且如果可能的話分配器本身的實現。你正確處理反彈嗎?如果我向一個容器提供一個默認的構造分配器,它是否正常工作?等等...... –

+0

@ K-ballo謝謝。分配器是另一個庫的一部分:[pool_allocator_stl](http://drdobbs.com/cpp/184406243)。我添加了一個新的保留策略,它使用boost :: shared_ptr來保存它們。如果我使用其默認保留策略,則在堆棧上檢測不到內存泄漏。 –

回答

0

您是否知道在C++ 03中將分配器視爲無狀態?嘗試使用您的分配器連同Boost.Containers(它剛剛被接受,但我認爲它們已經是Boost.Interprocess的一部分),它尊重分配器。如果沒有MemoryChunks的定義,很難說其他任何事情。

+0

MemoryChunks就像一個Chunk數組,每個chunk包含一個對象數組,並且ptr指向下一個空閒對象。由於除非塊被刪除,否則永遠不會釋放對象。分配/空閒意味着O(1)。當內存塊被刪除時,它將釋放所有的塊。 –