CApi 中的 PyArg_ParseTuple SegFaults
我正在编写代码,试图习惯 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
I am writing a code, trying to get used to the C API of NumPy arrays.
#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();
}
This is a stripped-down version. I just want to be able to get an object of type PyArrayObject
and return it back. Unfortunately this gives a SegFault also.
Linux, 64-bit, Python 2.7.1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自文档:
您返回的是被盗的引用。先增加它。
From the docs:
You're returning a stolen reference. Increment it first.