作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Python C-API 释放 PyTuple
对象的正确方法是什么?
我知道元组在引用计数语义方面有些特殊,因为PyTuple_SetItem
“窃取了”对插入元素的引用。我还知道减少元组对象的引用会减少元组中所有元素的引用计数。
考虑到这一点,我认为应该可以肯定地说:
#include <Python.h>
#include <stdio.h>
int main()
{
PyObject* tup = PyTuple_New(1);
PyTuple_SetItem(tup, 0, PyLong_FromLong(100L));
printf("Ref Count: %d\n", tup->ob_refcnt);
Py_DECREF(tup);
}
但是当我减少元组引用计数时,最后一行会导致段错误。我不明白为什么会发生这种情况。在调用 Py_DECREF
之前,引用计数为 1
,那么这里有什么问题呢?
最佳答案
在 main 的开头添加对 Py_Initialize();
的调用,然后重试。
关于python - 释放 PyTuple 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4898173/
使用 Python C-API 释放 PyTuple 对象的正确方法是什么? 我知道元组在引用计数语义方面有些特殊,因为PyTuple_SetItem“窃取了”对插入元素的引用。我还知道减少元组对象的
我是一名优秀的程序员,十分优秀!