【发布时间】:2019-09-17 07:54:51
【问题描述】:
我有这个简单的代码可以在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 3.7?)看看问题是否仍然存在?
-
@Jean-FrançoisFabre 我该如何指定?
-
安装一个新的python版本。输出显示您使用的是 2.7
-
@Jean-FrançoisFabre 我安装了 python3.7 但如果我使用这个标志 -I/usr/include/python3.7 -lpython3.7,它找不到库
-
可能是
-lpython37。而-I用于编译包含,链接路径需要-L
标签: python c memory-leaks valgrind