Retain reference to a struct

andychambers2002 at yahoo.co.uk andychambers2002 at yahoo.co.uk
Wed Nov 2 22:23:52 CET 2005


Hi All,

A C library I'm using has a number of functions that all require a
struct as an argument.  The example module shows how to make a new
Python Object from C code and I've seen other posts that recommend this
way of doing it.

In this case though, it would seem easier if I could create the object
in the Python code.  This would require storing a pointer to an
instance of the struct until a certain function is called.

I can get the pointer into the python code, but whenever I try to use
it to call another function, the module segfaults.  Can anyone suggest
why this is?

static PyObject *
libpyq_PQconnectdb(PyObject *self, PyObject *args)
{
        PGconn *conn = PyMem_New(PGconn, sizeof(PGconn *));
        conn = (PGconn *)PQconnectdb((const char*)
PyString_AS_STRING(args));

        printf("%p", conn);
        return PyLong_FromVoidPtr(conn) ;
}

static PyObject *
libpyq_PQfinish(PyObject *self, PyObject *args)
{
        printf("%p", args);
        return 1;
}

>>> import libpyq                #works fine
>>> conn = libpyq.PQconnectdb    #conn now a pointer
>>> libpyq.PQfinish(conn)        #segfaults

I'm new to C but relatively experienced with Python.  I have a sneaky
suspiscion there's a good reason for not doing it this way but I
haven't seen a good explanation of why not yet.  If you know one,
please tell me.

Thanks,
Andy




More information about the Python-list mailing list