[C++-sig] Memory Leaks In VS.NET 2003 With BOOST_PYTHON_MODULE

David Abrahams dave at boost-consulting.com
Thu Oct 13 16:37:10 CEST 2005


<mjkeyes at sbcglobal.net> writes:

> Hey again, I'm back.
>
> I've moved on to building an extension dll file in order to supplement
> my embedded application.  Once again, I've got memory leaks.
>
> However, this is an easy one to test using your method of calling a
> function over and over.  I did this and it chewed up the memory in my
> system like a hog (at least in task manager I see Python.exe growing
> steadily in memory consumption).
>
> Here is some pseudo-code of what I'm doing:

Not the actual code?  Please post actual, minimal code that fails.

> class A
> {
> public:
>   void SetString(const std::string &sVal)
>   {
>     m_sString = sVal; <--- Memory leak

I very much doubt that this line actually leaks memory unless there's
a bug in your compiler's standard library implementation.

>   }
>
>   void DoStuff()
>   {
>     SetString(msc_sString);
>   }
> protected:
>   static const std::string msc_sString;
> }
>
> class B
> {
> public:
>   object CreateClassA()
>   {
>     return object(new CreateClassA()); <---- memory leak

AFAICT this one isn't even legal C++, so I doubt it leaks memory also ;-)

However, 

         object(new X)

definitely leaks memory, for any X.  When converting a pointer to
Python, by default the pointee is copied into a new Python object, so
the original pointer you dynamically allocated will always be leaked.


-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com




More information about the Cplusplus-sig mailing list