参数指向 PySys_SetArgvEx() 的字符串是否应该保留在内存中直到 Py_Finalize()?
Shall strings pointed by paramaters to PySys_SetArgvEx() be kept in memory until Py_Finalize()?
我有如下一段代码
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 的所有内存是安全的。
我有如下一段代码
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 的所有内存是安全的。