这是我第一次使用 Python,所以请耐心等待:当我引用一个包含 c++ 类的 SWIG 模块时,我遇到了 28 个字节的内存泄漏。所有这些都在 Visual Studio 2012 中构建和运行。我的模块的 .cpp 文件是空的,我的头文件如下:
class foo{
public:
foo() {}
virtual ~foo() {}
};
这是 SWIG 的 .i 文件:
%module SwigTest2
%{
#define SWIG_FILE_WITH_INIT
#include "SwigTest2.h"
%}
%include "SwigTest2.h"
最后,这是我用来从 C++ 嵌入这个模块的代码:
Py_Initialize();
PyObject* pPath = PySys_GetObject((char*)"path");
if(pPath)
{
CString csScriptFolder("C:\\Testing\\Debug");
PyList_Append(pPath, PyUnicode_FromString(csScriptFolder));
CString csPath("multiply");
PyObject* pName = PyUnicode_FromString(csPath);
if(pName != NULL)
{
PyObject* pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL)
{
Py_DECREF(pModule);
}
}
}
Py_Finalize();
当我运行它时,除了内存泄漏之外,一切都很好。如果我将真实代码放入模块中,它可以正常工作,但在退出时仍然会泄漏 28 个字节。如果我向模块添加另一个类,我会得到另一个 28 字节的泄漏。如果我运行该模块 3 次,我会得到 3 个泄漏,所以如果我在模块中有 2 个类,我最终会得到 6 个总泄漏,每个泄漏 28 个字节。
一种可能性(除了我对 Python 的一般无知之外)是我在构建我的 c++ 模块和 c++ 可执行文件的调试版本时链接到 Python 的发布版本。另一件事是,如果我删除类定义并使用普通的旧函数,内存泄漏就会消失,一切正常。
非常感谢任何建议或帮助。谢谢你的时间。