2
我正在編寫一個代碼,試圖習慣NumPy數組的C API。PyArg_ParseTuple在CApi中的SegFaults
#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
我不熟悉C語言的軟件架構,但是我猜想當我不用'PYINCREF(the_python_object)增加引用時,'然後垃圾收集器發現它的引用是0,並釋放內存。 (糾正我,如果我錯了) –
本質上是的,但它的引用計數下降到0,調用GC而不是其他方式。 –