SWIG、Python和Visual Studio 2012的内存泄漏
Memory leak with SWIG, Python and Visual Studio 2012
这是我第一次使用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的发布版本。另一件事是,如果我删除类定义并使用普通的旧函数,内存泄漏就会消失,一切都可以正常工作。
任何建议或帮助都是非常感谢的。感谢您的宝贵时间。我能够通过将运行时库设置为"多线程DLL"而不是"多线程调试DLL"来解决这个问题。调试工作,但内存泄漏消失了。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- C++函数中的内存泄漏,Visual Studio 2012,链表
- VC 2012 中的内存泄漏检测
- 如何在 Visual Studio 2012 Visual c++ 中动态分配内存
- 在Visual Studio 2012中设置内存断点
- visualstudio 2012-如何在c++中修改对象已知内存地址
- SWIG、Python和Visual Studio 2012的内存泄漏