python - 参数指向 PySys_SetArgv() 的字符串是否应该保留在内存中直到 Py_Finalize()?

标签 python c python-c-api cpython python-embedding

我有如下一段代码

int nArgs;
if (LPWSTR * const szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs))
{
  PySys_SetArgvEx(nArgs, szArglist, false);
  LocalFree(szArglist);
}

我在 Python 中找不到 documentation如果 szArglist 指向的内存应保留到 Python 关闭或我可以立即释放它。

有人可以解释一下吗?

谢谢! 弗拉基米尔

最佳答案

Python C API 看起来像是在使用一个新的 PyList 对象来填充参数,并且正在为 char* 参数分配自己的内存。

对于长度超过 1 个字符的字符串,PySys_SetArgvEx 将为该字符串 malloc 自己的内存。

因此,删除您传递给 PySys_SetArgvEx 的任何已分配内存是安全的。

关于python - 参数指向 PySys_SetArgv() 的字符串是否应该保留在内存中直到 Py_Finalize()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34510834/

相关文章:

c - 在不修改内容的情况下传递字符串数组

python - 使用来自 C 的更高级别的 Python 结构

python - Python 3 : How/when to call it? 中的 PyEval_InitThreads(传奇继续令人作呕)

python - PyPI 模块不工作

python - ImportError [E048] 无法从 spacy.lang 导入语言 en

python - 使用 Google App Engine 如何在 google docs (python) 中上传文件

c - 从 C 样式字符串问题中删除 C 样式注释的函数

c - 按字母顺序对链表排序

python - 在 C/API 中指定 Python 函数签名

c++ - 如何编写函数和成员函数的包装器,在包装函数之前和之后执行一些代码?