[capi-sig] Extension Problem

Ali Alhakim alika at spray.se
Tue Aug 14 10:15:16 CEST 2007


Hello!
 
I'm quite new to Python and definitely a beginner in implementing Python
extensions in C/C++. I've followed the structure given in the formal Python
documentation to write the following code block:
===========
//cmatmod.c
 
#include 
 
static unsigned int eigenvect_calc(double *min_eps)
{
 return 5;
}
 
static PyObject *cmat_eigv(PyObject *self, PyObject *args)
{
 double *min_eps;
 unsigned int m;
 if(!PyArg_ParseTuple(args, "d", &min_eps))
  return NULL;
 m=eigenvect_calc(min_eps);
 return Py_BuildValue("I", m);
 }
static PyMethodDef cmat_methods[]=
{
 { "eigenvect", cmat_eigv, METH_VARARGS, "Comment"},{NULL, NULL, 0, NULL}
 };
 
void initcmat(void)
{
  (void) Py_InitModule("cmat", cmat_methods);
 }
 
===========
 
I have succeeded to build and install this extension using disutils package
in the setup.py file below:
===========
from distutils.core import setup
from distutils.extension import Extension
setup(name='eigenvect',
      version='1.0',
      ext_modules=[Extension('cmat', ['cmatmod.c'])],
      )
 
==========
But when I try to call eigenvect(3.0) from Python I would receive a core
dump:
==========
 
 6 [main] python 2336 _cygtls::handle_exceptions: Error while dumping state
 (probably corrupted stack)
Segmentation fault (core dumped)
 
==========
My question is what is wrong with the extension code above? Is it something
with reference counting?
I don't know which method is suitable for debugging extension codes. I've
tried gdb but I didn't understand the debug information:
==========
 
(gdb) >>> eigenvect(4.0)
 
Program received signal SIGSEGV, Segmentation fault.
---Type  to continue, or q  to quit---
0x6abb248e in libpython2!PyEval_EvalFrameEx () from
/usr/bin/libpython2.5dll
(gdb)
 
==========
/best regards
 







 


 

Gå in och titta på nätets roligaste filmer just nu eller ladda upp ditt eget bidrag på Spray Crazy. http://crazy.spray.se/


More information about the capi-sig mailing list