2

最近、私は C 拡張機能を備えた Python モジュールのプログラミングに取り組んでいます。( python2.7、gcc 4.1.2) 完了したらテストします。次のバスエラーが見つかりました。

誰かが理由を知っていますか?

ps このエラーが発生する前に。に記載されている「return Py_False関連のエラー」を修正しました

アプリケーションは、C++ の Python 拡張関数でセグメンテーション違反をランダムに発生させます

コアはによって生成されましたpython2.7 app.py --debug=False --multi_slaves=True

プログラムは信号 7、バス エラーで終了しました。
#0 0x0000003d22272cf1 in _int_malloc () from /lib64/libc.so.6
(gdb) where
#0 0x0000003d22272cf1 in _int_malloc () from /lib64/libc.so.6
#1 0x0000003d22274e4e in malloc () from /lib64/libc.so.6 .6
#2 0x00000000004D3069 in _pyobject_gc_malloc(basicsize = <value optimized out>)at modules/gcmodule.c:1445
#3 0x0000000046408c in pytype_genericalloc(type = 0x768360)at nitems
= 05555555555555555551 、args=、kwds=0x7fff8dcb4eb0) Objects/dictobject.c:2301
で #5 0x00000000004661c3 type_call (type=0x3d225539e0、args=0x2b3e5a521050、kwds=0x2239bca0) at Objects/typeobject.c:721
#6 PyObject_Call の 0x00000000004189cd (func=0x768360、arg=0x2b3e5a521050、kw=0x2239bca0)、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;
    }
}

4

1 に答える 1