Python Api C会产生内存泄漏

问题描述 投票:0回答:1

我有这个简单的代码在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 c memory-leaks valgrind
1个回答
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

您可能还需要首先执行:export PYTHONMALLOC = malloc

© www.soinside.com 2019 - 2024. All rights reserved.