首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python C-API分段故障

Python C-API分段故障
EN

Stack Overflow用户
提问于 2014-08-18 20:29:20
回答 1查看 502关注 0票数 2

我有这样的代码:

代码语言:javascript
复制
static PyObject* py_write(PyObject *self, PyObject* args){

    PyObject *tx_list;
    PyObject *item = 0;
    uint8_t tx_len = 0;

    /* Parse arguments */
    if(!PyArg_ParseTuple(args, "O!", &PyList_Type, &tx_list)){
        return NULL;
    }

    /* Get length of list */
    tx_len = PyList_Size(tx_list);

    /* Allocate memory for output buffer */
    uint8_t *tx_buffer = (uint8_t *)malloc(tx_len * sizeof(uint8_t));
    memset(tx_buffer, 0, sizeof(uint8_t));

    /* Populate output buffer */
    int i;
    for(i = 0; i < tx_len; i++){
        item = PyList_GetItem(tx_list, i);
        tx_buffer[i] = (uint8_t)PyInt_AsLong(item);
    }

    /* Send data */
    if(spi_write(fd, tx_buffer, tx_len) < 0){
        return PyErr_SetFromErrno(PyExc_IOError);
    }

    /* Do cleanup */
    free(tx_buffer);
    Py_DECREF(item);
    Py_DECREF(tx_list);

    Py_RETURN_NONE;
}

当我调用此方法一次时,没有任何问题。但是在大约2000年的时候,我得到了分段错误。我猜我的引用计数有问题。有没有人可以帮我或者告诉我一些调试的方法?

EN

回答 1

Stack Overflow用户

发布于 2014-08-18 22:08:11

PyList_GetItem返回一个借用的引用,你不需要Py_DECREF项。此外,当调用Python C-Api调用时,如果出现异常,则返回NULL。检查来自PyList_GetItemNULL

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25363338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档