Python Api C生成内存

2024-09-25 02:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 内存代码pystringcounterfunctionresultmodule
1条回答
网友
1楼 · 发布于 2024-09-25 02:35:19

突出显示的输出(大部分)不是内存泄漏,而是 无效读取。这些很可能是由非常特殊的方式引起的 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

相关问题 更多 >