在C
中运行一个小的python
代码的简单代码如下:
Py_Initialize();
string_module = PyUnicode_FromString((char *) "kmer_counter");
module = PyImport_Import(string_module);
function = PyObject_GetAttrString(module, (char *) "counter");
result = PyObject_CallFunction(function, "i", 5);
if ( !result ) {
fprintf(stderr, "Exception:\n");
PyErr_PrintEx(0);
exit(1);
}
Py_DECREF(string_module);
Py_DECREF(module);
Py_DECREF(function);
Py_DECREF(result);
Py_Finalize();
我用valgrind
测试代码,发现内存泄漏(这里是output)。经过一些测试,我发现内存泄漏是由指令Py_Initialize();
引起的。我怎样才能解决这个问题?你知道吗
我带着这面旗子跑valgrind:
valgrind --tool=memcheck --leak-check=full ./exe
突出显示的输出(大部分)不是内存泄漏,而是 无效读取。这些很可能是由非常特殊的方式引起的 python管理它的内存。你知道吗
作为python源文件的一部分,您应该找到valgrind的抑制文件, 这将抑制这些消息,因为它们不是真正的错误。你知道吗
对于我的3.6.6python版本,它位于python-3.6.6/Misc/valgrind中-python.supp文件你知道吗
因此,在valgrind下运行您的程序,使用: valgrind suppressions=path/to/the/python/Misc/valgrind-python.supp文件你知道吗
您可能还需要首先执行以下操作: 导出PYTHONMALLOC=malloc
相关问题 更多 >
编程相关推荐