Memory leak

Andrew Gregory andrew.gregory at
Tue Mar 4 13:07:08 CET 2003

I keep being troubled by memory leaks when using C/C++ extensions (I
have Python 2.2.2 on Windows). The problem is most acute in
mathematical code, in which a C routine in an extension is called
repeatedly in a loop. So I wrote a simple test program:

// test.h
typedef PyObject* RESULTOBJ;

  // Hand-coded wrapper for returning string
  RESULTOBJ wrap_string(char *s)
    RESULTOBJ result;
    result = PyString_FromString(s);
    return Py_BuildValue("O",result);

  RESULTOBJ getstring()
    static char *s = "This is a message string";
    RESULTOBJ result = wrap_string(s);
    return result;

// test.i
%module test
   #include "test.h"

%include test.h

which is then wrapped using SWIG 1.3.17 (SWIG -python test.i) and

In Python,

>>> import _test
>>> k=0
>>> for i in range(2000):
... 	s=_test.getstring()
... 	k=k+1
... 	if k==200:
... 		k=0
... 		print i, s
199 This is a message string
399 This is a message string

If I make the number of loops large enough (say 200000) then I get a
crash, just like I do with my mathematical programs. My understanding
is that Python will delete the PyObjects created with
PyString_FromString() automatically. Does anyone have any ideas?


More information about the Python-list mailing list