调用一些PyObject函数会导致segfault-Boost python

Calling some PyObject functions causes segfault - Boost python

本文关键字:segfault-Boost python 函数 PyObject 调用      更新时间:2023-10-16

对于一个项目,我需要用Python接口一些C++模块。为此,我需要一个转换器,它可以将Python元组转换为cv::Size(openCV对象)。这是我的C++函数:

cv::Size tupleToSize(PyObject* obj)
{
    // Check if obj is a tuple :
    if (!PyTuple_CheckExact(obj))
        return cv::Size(-1,-1);
    // Element Extraction :
    PyObject* x = PyTuple_GetItem(obj,0);
    PyObject* y = PyTuple_GetItem(obj,1);
    // TODO : extract values from x and y
    // Trying to create two variables a et b that contains the values
    long a = PyLong_AsLong(x);
    long b = PyLong_AsLong(y);
    /* The first line causes a SegFault*/
    // New cv::Size with extracted values :
    cv::Size ret(a,b);
    return ret;
}

这里是调用我的函数的主要部分:

int main()
{
    // New cv:Size :
    Size s(10,20);
    // Conversion :
    PyObject* ss = SizeToTuple(s); // I have a SizeToTuple function that works fine.
    // Reconversion :
    Size sss = tupleToSize(ss); /* SEGFAULT */

    return 0;
}

所以,我想知道我的PyObject x和y是否不是Long类型,所以我决定检查它们的类型,但当我调用一些函数时:

PyObject_repr(x);
PyObject_str(x);

它们也会导致segfault。

所以,我被卡住了。你有什么建议吗?提前谢谢。

多亏了Tanner Sansbury,我只添加了就解决了这个问题

Py_Initialize();

在我的代码中。

问题解决了!