Python/C API - PyArg_ParseTuple problem ?

Michael Hudson mwh at
Fri Aug 22 20:23:28 CEST 2003

"Poire Williams" <poire.williams at> writes:

> Hi, everybody.
> I'm writing a Python binding for a C++ library and I just found something
> that puzzles me.


> If I do this:
> >> s = 'hi'
> >> t = NewType(0, 42, s)
> everything is well... 

Even after a 'del s'?

> Moreover, if I change my C code to something like
> this:
> if (!PyArg_ParseTuple(args, "ii|O", &a, &b, &o)
>     return NULL;
> s = PyString_AsString(o);
> everything's fine again, in both cases...
> I guess it's some kind of twisted reference count thing, and I'm still
> trying to get some minimal C code to reproduce this. Meanwhile, does
> anybody have a clue ?
> Thanks in advance.
> Precisions: I'm running Python 2.2.3 on Linux, and I don't free() the
> buffer retrieved via PyArg_ParseTuple or PyString_AsString :)

No, but I bet you're stuffing it into your data structure somewhere
along the line.  I think you need to copy the string data.


  In that case I suggest that to get the correct image you look at
  the screen from inside the monitor whilst standing on your head.  
               -- James Bonfield,

More information about the Python-list mailing list