Memory leak

Andrew Gregory andrew.gregory at npl.co.uk
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
compiled.

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
etc.

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?

Andrew.




More information about the Python-list mailing list