使用C扩展的Python中的总线错误

时间:2013-04-17 07:35:16

标签: python c

最近我一直在使用C扩展编写python模块。 (python2.7,gcc 4.1.2) 完成并测试。我发现以下总线错误。

有人知道为什么吗?

p.s之前我收到此错误。我修复了

中描述的'返回Py_False相关错误'

Application gives segmentation fault randomly in python extension functions in c++

核心由python2.7 app.py --debug=False --multi_slaves=True

生成
  

程序因信号7,总线错误而终止   来自/lib64/libc.so.6的_int_malloc()中的#0 0x0000003d22272cf1
  (gdb)其中
  来自/lib64/libc.so.6的_int_malloc()中的#0 0x0000003d22272cf1
  来自/lib64/libc.so.6的malloc()中的#1 0x0000003d22274e4e
  模块/ gcmodule.c中的_PyObject_GC_Malloc(basicsize = <value optimized out>)中的#2 0x00000000004d3069:1445
  #3 0x000000000046408c在PyType_GenericAlloc(type = 0x768360,nitems = 0)at Objects / typeobject.c:753
  #4 0x00000000004477ec在dict_new(type = 0x3d225539e0,args =,kwds = 0x7fff8dcb4eb0)at Objects / dictobject.c:2301
  对象/ typeobject.c中的type_call(类型= 0x3d225539e0,args = 0x2b3e5a521050,kwds = 0x2239bca0)中的#5 0x00000000004661c3:721
  PyObject_Call中的#6 0x00000000004189cd(func = 0x768360,arg = 0x2b3e5a521050,kw = 0x2239bca0)at Objects / abstract.c:2529

c扩展代码如下所示

static PyObject* analyze( PyObject *self, PyObject *args )
{
    int     ret;
    char*   in;

    // global variables : void* obj, char* outbuf, int outbuf_size;
    if (PyArg_ParseTuple(args, "s", &in)){
        ret = process(obj, in, outbuf, outbuf_size);
        if ( ret == SUCCESS ) {
            PyObject* py_out = PyString_FromString(outbuf);
            return py_out;
        } else {
            Py_INCREF(Py_False);
            return Py_False;
        }
    } else {
        Py_INCREF(Py_False);
        return Py_False;
    }
}

1 个答案:

答案 0 :(得分:0)

FWIW我从python程序中遇到了总线错误。原来与其分配共享内存有关。我在docker容器中运行它,并且必须按照以下说明设置email_verified_athttps://goblincoding.com/2018/02/19/docker-bus-error-no-space-left-on-device/