Python extension module segmentation fault

Rolf Wester rolf.wester at ilt.fraunhofer.de
Fri Oct 21 04:13:20 EDT 2005


Hi,

I' trying to make an extension module that passes Numeric arrays. The
wrapper function is (swig generated and modified by myself):

static PyObject *_wrap_my_func(PyObject *self, PyObject *args) {
    PyObject * resultobj = 0 ;
    PyObject * obj0 = 0 ;
    PyArrayObject * mat = 0 ;

	std::cout << __FILE__ << "  " <<  __LINE__ << std::endl;
    if(!PyArg_ParseTuple(args,(char *)"O:my_func",&obj0)) goto fail;
	std::cout << __FILE__ << "  " <<  __LINE__ <<  "  " << obj0 << std::endl;
 	mat = (PyArrayObject *) PyArray_ContiguousFromObject(obj0,
PyArray_DOUBLE, 1, 1);
	std::cout << __FILE__ << "  " <<  __LINE__ <<  "  " << mat << std::endl;

    Py_INCREF(Py_None); resultobj = Py_None;
    return resultobj;
    fail:
    return NULL;
}

The shared object is build with:

g++ -c -g -fPIC -I./  -I/usr/local/include/python2.4
-I/usr/local/include/python2.4/Numeric  mytest_wrap.cpp -o mytest_wrap.o

g++ -shared -L/usr/local/lib/python2.4/config/  mytest_wrap.o
-lpython2.4 -lm   -o _mytest.so


the Python file reads:

import _mytest
from Numeric import *
mat = ones(100,Float64)
print _mytest.my_func(mat)

When running this I get the output:

mytest_wrap.cpp  1499
mytest_wrap.cpp  1502  0x402b55e8
Speicherzugriffsfehler (segmentation fault)

I also ran this with valgrind. Part of valgrinds output is:

==15792== Reading syms from
/mnt/pubdsk/A31/2003/DOKUMENTATION/WESTER/pr3/OPT/opt2.0/test/_mytest.so
(0x1BE7E000)
==15792== Reading syms from
/usr/local/lib/python2.4/site-packages/Numeric/multiarray.so (0x1B90F000)
==15792== Reading syms from
/usr/local/lib/python2.4/site-packages/Numeric/_numpy.so (0x1BFDB000)
==15792== Reading syms from
/usr/local/lib/python2.4/site-packages/Numeric/umath.so (0x1BFF1000)
==15792== Reading syms from
/usr/local/lib/python2.4/lib-dynload/strop.so (0x1B91A000)
==15792== Reading syms from /usr/local/lib/python2.4/lib-dynload/math.so
(0x1C103000)
==15792== Reading syms from
/usr/local/lib/python2.4/lib-dynload/struct.so (0x1C209000)
==15792== Reading syms from
/usr/local/lib/python2.4/lib-dynload/binascii.so (0x1C210000)
==15792== Reading syms from
/usr/local/lib/python2.4/lib-dynload/cStringIO.so (0x1C216000)
mytest_wrap.cpp  1499
mytest_wrap.cpp  1502  0x1bca7610
==15792== Invalid read of size 4
==15792==    at 0x1BECE794: _wrap_my_func (mytest_wrap.cpp:1503)
==15792==    by 0x811E685: PyCFunction_Call (methodobject.c:93)
==15792==    by 0x80C708F: PyEval_EvalFrame (ceval.c:1499)
==15792==    by 0x80C8933: PyEval_EvalCodeEx (ceval.c:2736)
==15792==    by 0x80C8B64: PyEval_EvalCode (ceval.c:484)
==15792==    by 0x80F74A7: PyRun_SimpleFileExFlags (pythonrun.c:1265)
==15792==    by 0x80558D6: Py_Main (main.c:484)
==15792==    by 0x8054F86: main (python.c:23)
==15792==  Address 0x38 is not stack'd, malloc'd or (recently) free'd
==15792==
==15792== Process terminating with default action of signal 11 (SIGSEGV)
==15792==  Access not within mapped region at address 0x38
==15792==    at 0x1BECE794: _wrap_my_func (mytest_wrap.cpp:1503)
==15792==    by 0x811E685: PyCFunction_Call (methodobject.c:93)
==15792==    by 0x80C708F: PyEval_EvalFrame (ceval.c:1499)
==15792==    by 0x80C8933: PyEval_EvalCodeEx (ceval.c:2736)
==15792==    by 0x80C8B64: PyEval_EvalCode (ceval.c:484)
==15792==    by 0x80F74A7: PyRun_SimpleFileExFlags (pythonrun.c:1265)
==15792==    by 0x80558D6: Py_Main (main.c:484)
==15792==    by 0x8054F86: main (python.c:23)
==15792==
==15792== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 8093 from 7)
==15792==


I would be very appreciative for any help.

With kind regards

Rolf Wester







More information about the Python-list mailing list