最近我一直在使用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;
}
}
〜
答案 0 :(得分:0)
FWIW我从python程序中遇到了总线错误。原来与其分配共享内存有关。我在docker容器中运行它,并且必须按照以下说明设置email_verified_at
:
https://goblincoding.com/2018/02/19/docker-bus-error-no-space-left-on-device/