【发布时间】:2011-04-09 17:25:06
【问题描述】:
我正在编写一个 Python C 扩展,在 here 列出的示例中,有一段 sn-p 代码:
static PyObject * spam_system(PyObject *self, PyObject *args) {
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command)) return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
根据使用 PyArg_ParseTuple 解析字符串的文档,“您不得为字符串本身提供存储;指向现有字符串的指针存储在您传递其地址的字符指针变量中。”那么Python如何知道“命令”指向的内存何时可以被释放呢?怎么没有发生内存泄漏?
【问题讨论】:
-
它在哪里说 Python 会自行释放内存?我假设你完成后需要释放它。
-
当它说“指向现有字符串的指针”时,我假设 PyArq_ParseTuple 不分配内存。不过,这不是一个安全的假设,我会检查文档。
-
@delnan 我也是这么想的,但是当我尝试释放内存时,我得到 *** glibc detected *** python: munmap_chunk(): invalid pointer: 0x0000000001ef16dc ***
-
@Thiago 这样的话,如果我一直运行 spam_system,我最终不会耗尽内存吗?
-
是的,正如刚刚回答的那样,没有分配额外的内存。该函数返回一个指向先前分配的对象的指针(args 参数)。
标签: python c memory-leaks