gpt4 book ai didi

Python C-API 段错误

转载 作者:太空狗 更新时间:2023-10-29 12:15:49 25 4
gpt4 key购买 nike

我有这个代码:

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 年我遇到了段错误。我猜我的引用计数有问题。有人可以帮助我或告诉我一些调试方法吗?

最佳答案

PyList_GetItem 返回借用的引用,您不需要 Py_DECREF 项目。此外,在调用 Python C-Api 调用时,如果出现异常,则返回 NULL。从 PyList_GetItem 检查 NULL

关于Python C-API 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com