CPython API-Py_BuildValue错误退出代码-1073741819

问题描述

我一直在尝试使用cpython API创建计算贝塞尔曲线的函数。但是,当我尝试运行程序时,出现以下错误(而是退出代码)。一切都能正确编译,这是我的代码

static PyObject* BezierCurve_raw_bezier_curve(PyObject* self,PyObject* args){
    unsigned long long size;
    double t;
    PyObject *py_control_points,*temp1,*x,*y;

    if (!PyArg_ParseTuple(args,"dO",&t,&py_control_points))
        return NULL;

    size = PyLong_AsUnsignedLongLong(PyLong_FromSsize_t(PyList_GET_SIZE(py_control_points)));

    long long *control_points = (long long*)malloc(size * sizeof(long long) * 2);

    for (unsigned long long i = 0; i < size; i+=2){

        temp1 = PyList_GetItem(py_control_points,i);

        if (temp1 == NULL)
            return NULL;

        x = PyList_GetItem(temp1,0);
        y = PyList_GetItem(temp1,1);

        if (PyNumber_Check(x) != 1 || PyNumber_Check(y) != 1){
            PyErr_SetString(PyExc_TypeError,"Control Points Argument is Non-Numeric");
            return NULL;}

        control_points[i] = PyLong_AsLongLong(x);
        control_points[i + 1] = PyLong_AsLongLong(y);

        Py_DECREF(x);
        Py_DECREF(y);
        Py_DECREF(temp1);

        if (PyErr_Occurred())
            return NULL;
    }

    Py_DECREF(py_control_points);

    struct DoubleTuple2 point = raw_bezier_curve(t,size,control_points);
    printf("x: %lf,y: %lf",point.x,point.y);
    return Py_BuildValue("[dd]",point.y);
}
struct DoubleTuple2 {
    double x,y;
};

我打印了point结构的值,这就是输出内容

x: 185.424000,y: 167.1840000.23040000000000005

Process finished with exit code -1073741819 (0xC0000005)

为什么引起此错误raw_bezier_curve函数还返回一个double值。

struct DoubleTuple2 raw_bezier_curve(long double t,unsigned long long size,long long control_points[]) {...}

我如何使其起作用?并有一种方法可以获取更多信息(用于以后的调试)?

解决方法

最后!我知道了。事实证明,问题很简单-我错过了一个逗号。要解决此问题,我进行了更改:

{somvariable && <Text></Text>}

return Py_BuildValue("[dd]",point.x,point.y);