Tue, 20 Jul 2010 18:04:42 -0500, Warren Weckesser wrote: [clip] > I've made some progress, and now I'm getting a bus error. With the > following extension module, calling example.foo results in a bus error, > regardless of the arguments given. The error occurs in the call to > PyArg_ParseTuple. I'm using same format string as in the example in the > numpy docs, "O!". Any ideas? > > ----- > #include <stdio.h> > #include "Python.h" > #include "numpy/arrayobject.h" > > static PyObject *foo_wrap(PyObject *dummy, PyObject *args) { > PyObject *arg1 = NULL; > > printf("boo\n"); > if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &arg1)) { > printf("bad\n"); > return NULL; > } > printf("here\n"); > return Py_None; > }
You need to INCREF the None return value (but that won't cause a crash here). > static PyMethodDef wrappers[] = { > {"foo", foo_wrap, METH_VARARGS, "just a test"}, {NULL, NULL, 0, > NULL} /* Sentinel */ > }; > > PyMODINIT_FUNC > initexample(void) > { > (void) Py_InitModule("example", wrappers); > } You need to call import_array(); in the init function. Otherwise, PyArray_Type probably won't be initialized. This can cause a crash. -- Pauli Virtanen _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion