我有这个简单的代码,可以在python
中运行一个小的C
代码:
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
答案 0 :(得分:1)
突出显示的输出(主要)不是内存泄漏,而是 无效的读取。这些很可能是由非常特殊的方式引起的 python管理其内存。
作为python源文件的一部分,您应该找到valgrind的禁止文件, 应该抑制这些消息,因为它们不是真正的错误。
对于我的3.6.6 python版本,它位于Python-3.6.6 / Misc / valgrind-python.supp
因此,使用以下命令在valgrind下运行程序: valgrind --suppressions = path / to / the / python / Misc / valgrind-python.supp
您可能还需要先执行以下操作: 导出PYTHONMALLOC = malloc