2

NumPy 配列の C API に慣れようとして、コードを書いています。

#include <Python.h>
#include "numpy/arrayobject.h"
#include <stdio.h>
#include <stdbool.h>


static char doc[] =
"Document";

static PyArrayObject *
    trace(PyObject *self, PyObject *args){

    PyArrayObject *matin;

    if (!PyArg_ParseTuple(args, "O!",&PyArray_Type, &matin))
         return NULL;

    printf("a");
    return matin;
}

static PyMethodDef TraceMethods[] = {
    {"trace", trace, METH_VARARGS, doc},
    {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC
inittrace(void)
{
    (void) Py_InitModule("trace", TraceMethods);
    import_array();
}

これは簡素化されたバージョンです。PyArrayObjectタイプのオブジェクトを取得して返すことができるようにしたいだけです。残念ながら、これにより SegFault も発生します。

Linux、64 ビット、Python 2.7.1

4

1 に答える 1

1

ドキュメントから:

O(object)[PyObject *]
Pythonオブジェクト(変換なし)をCオブジェクトポインターに格納します。したがって、Cプログラムは、渡された実際のオブジェクトを受け取ります。オブジェクトの参照カウントは増加しません。保存されているポインタはNULLではありません。

O!(object)[ typeobject、PyObject*]
PythonオブジェクトをCオブジェクトポインタに格納します。これはに似てOいますが...

盗まれた参照を返しています。最初にインクリメントします。

于 2011-10-13T23:49:38.703 に答える