Memory Leak with import_array() for numpy Python3.5

回眸只為那壹抹淺笑 提交于 2019-12-11 15:26:02

问题


Could someone suggest a fix for this problem? When I use import_array(), Valgrind reports memory leak of 157528 bytes. Here is the small piece of code to replicate the problem on Ubuntu16.04 and Python3.5

    #include <Python.h>
    #include "numpy/arrayobject.h"

    int main(int argc, char *argv[])
    {
        Py_Initialize();
        import_array();
        Py_Finalize();
        return 0;
    }

Here are the relevant pieces of Valgrind report.

==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)

来源:https://stackoverflow.com/questions/48200892/memory-leak-with-import-array-for-numpy-python3-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!