我有这个简单的代码在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
您突出显示的输出(主要)不是内存泄漏,而是无效读取。这很可能是由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
您可能还需要首先执行:export PYTHONMALLOC = malloc