有人可以建议修复此问题吗? 当我使用import_array()时,Valgrind报告157528字节的内存泄漏。 这是在Ubuntu16.04和Python3.5上复制问题的一小段代码
#include <Python.h>
#include "numpy/arrayobject.h"
int main(int argc, char *argv[])
{
Py_Initialize();
import_array();
Py_Finalize();
return 0;
}
以下是Valgrind报告的相关内容。
==85642== **2,689** bytes in 2 blocks are definitely lost in loss record 1,044 of 1,100
==85642== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==85642== by 0x4ED9777: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x505C42B: PyBytes_FromStringAndSize (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x786FE34: arr_add_docstring (compiled_base.c:1415)
==85642== by 0x4EE8038: PyCFunction_Call (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FF41B4: PyEval_EvalFrameEx (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FF4638: PyEval_EvalFrameEx (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x5084CAB: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x5084D82: PyEval_EvalCodeEx (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FEC9CA: PyEval_EvalCode (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FF967C: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4EE8038: PyCFunction_Call (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== **154,839** bytes in 81 blocks are definitely lost in loss record 1,099 of 1,100
==85642== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==85642== by 0x4ED9777: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4EA81D8: PyUnicode_New (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4EABFDC: _PyUnicode_FromASCII (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FA073C: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4EE8038: PyCFunction_Call (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FF41B4: PyEval_EvalFrameEx (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FF4638: PyEval_EvalFrameEx (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x5084CAB: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x5084D82: PyEval_EvalCodeEx (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FEC9CA: PyEval_EvalCode (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== by 0x4FF967C: ??? (in /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0)
==85642== LEAK SUMMARY:
==85642== definitely lost: 157,528 bytes in 83 blocks
==85642== indirectly lost: 0 bytes in 0 blocks
==85642== possibly lost: 158,183 bytes in 89 blocks
==85642== still reachable: 1,730,311 bytes in 3,551 blocks
==85642== suppressed: 0 bytes in 0 blocks
==85642==
==85642== For counts of detected and suppressed errors, rerun with: -v
==85642== ERROR SUMMARY: 2768 errors from 123 contexts (suppressed: 0 from 0)