Нестабильное расширение Cython не будет зависать при запуске с помощью valgrind

Я сделал довольно сложное расширение Python, используя Cython. Который работал нормально, пока я не получил странное поведение памяти, в форме:

*** glibc detected *** /usr/bin/python2.7: double free or corruption (out): 0x0000000002177a30 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7f1bf634bd76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f1bf6350aac]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(+0x4dd1f)[0x7f1bf5a45d1f]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(+0x4e01b)[0x7f1bf5a4601b]
/usr/bin/python2.7(PyEval_EvalFrameEx+0x29b)[0x4eaa3b]
/usr/bin/python2.7(PyEval_EvalFrameEx+0xa82)[0x4eb222]
/usr/bin/python2.7(PyEval_EvalCodeEx+0x1a0)[0x4f1db0]
/usr/bin/python2.7[0x4f2e00]
/usr/bin/python2.7(PyObject_Call+0x36)[0x44a176]
/usr/bin/python2.7[0x47cc7a]
/usr/bin/python2.7(PyObject_Call+0x36)[0x44a176]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(cy_call_func_void+0xca)[0x7f1bf5a2196a]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(_ZN4elps17ALabSimulatorTime9FireEventEv+0x22)[0x7f1bf5a580c2]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/lib/libelp.so(_ZN4elps16LabSimulatorTime14StepSimulationEv+0x51)[0x7f1bf57ca351]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(_ZN4elps17ALabSimulatorTime14StepSimulationEv+0x40)[0x7f1bf5a583d0]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/lib/libelp.so(_ZN4elps16LabSimulatorTime13RunSimulationEv+0x42)[0x7f1bf57ca2c2]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(_ZN4elps17ALabSimulatorTime13RunSimulationEv+0x40)[0x7f1bf5a58330]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/lib/libelp.so(_ZN4elps16LabSimulatorBase3RunEv+0x24)[0x7f1bf57c79a4]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(+0x20e5d)[0x7f1bf5a18e5d]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(+0x1fec0)[0x7f1bf5a17ec0]
...

Ошибка также может принять эту форму:

*** glibc detected *** python: corrupted double-linked list: 0x0000000007dc67b0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7f22b8789d76]
/lib/x86_64-linux-gnu/libc.so.6(+0x771ed)[0x7f22b878a1ed]
/lib/x86_64-linux-gnu/libc.so.6(+0x794d4)[0x7f22b878c4d4]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x70)[0x7f22b878eb90]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_Znwm+0x1d)[0x7f22b7bf607d]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(_ZNSt6vectorIdSaIdEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPdS1_EERKd+0xee)[0x7f22b8159d7e]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(+0x4dd62)[0x7f22b814cd62]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(+0x4dffb)[0x7f22b814cffb]
python(PyEval_EvalFrameEx+0x29b)[0x4eaa3b]
python(PyEval_EvalFrameEx+0xa82)[0x4eb222]
python(PyEval_EvalCodeEx+0x1a0)[0x4f1db0]
python[0x4f2e00]
python(PyObject_Call+0x36)[0x44a176]
python[0x47cc7a]
python(PyObject_Call+0x36)[0x44a176]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(cy_call_func_void+0xca)[0x7f22b812894a]
/home/golgauth/Documents/02_DEV/EVOLAB/ECLIPSE-WS_ELP/evolab-cython/setup/cyelp.so(_ZN4elps17ALabSimulatorTime9FireEventEv+0x22)[0x7f22b815f092]
../../lib/libelp.so(_ZN4elps16LabSimulatorTime14StepSimulationEv+0x51)[0x7f22b7ed1351]

Я сожалею, что не могу предоставить пример кода, так как ошибка может быть вызвана чем-либо.

Поскольку я не мог найти источник проблемы, я начал использовать Valgrind. Удивительно (для меня), моя программа отказывается аварийно завершать работу при запуске с valgrind.

Вот мой скрипт запуска:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../lib
export PYTHONPATH=$PYTHONPATH:../../setup

# Run simulation
valgrind --log-file=valgrind.report --show-reachable=no --leak-check=full --tool=memcheck --suppressions=valgrind-python.supp python ./BdmLsim4.py -i model.xml

#python BdmLsim4.py -i model.xml

Итак, мой вопрос: какие различия могут существовать между способами запуска сценария Python? За исключением того, что сценарий работает медленнее, переключается ли Valgrind в определенной среде / режиме?

Я нахожусь под gcc версии 4.7.2 (Debian 4.7.2-4) и Cython версии 0.18.

  • Примечание 0: я вообще не использую темы.
  • Примечание 1: я также импортирую numpy, который может иметь отношение ко второму типу ошибки, указанному ниже.
  • Примечание 2: Запуск сценария в режиме отладки приводит к универсальным ошибкам такого же типа.
  • Примечание 3: я использую файл подавления, приведенный здесь: http://wiki.cython.org/UsingValgrindToDebug
  • Примечание 4: Расширение My Cython использует мою внешнюю общую библиотеку.
  • Примечание 5: С другой стороны, я написал ту же программу на C ++ (то есть, которая зависит от той же внешней чистой разделяемой библиотеки C ++), которая не дает сбоя.

Если Valgrind ничего не может сделать для меня, есть ли другая программа, которая может помочь с отслеживанием ошибок памяти …

Nota Bene: Я новичок в использовании Valgrind, поэтому я мог бы что-то упустить при понимании отчета Valgrind:

...
==5679==
==5679== Invalid write of size 8
==5679==    at 0x812DB01: elps::ALabNode::SetPyObj(_object*) (ALabNetBinding.cpp:27)
==5679==    by 0x8113B2C: __pyx_f_5cyelp_12PyLabNetwork_Populate(__pyx_obj_5cyelp_PyLabNetwork*, int, int) (cyelp.cpp:10112)
==5679==    by 0x81070B3: __pyx_pw_5cyelp_12PyLabNetwork_5Populate(_object*, _object*) (cyelp.cpp:10281)
==5679==    by 0x4EB165: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4D980C: PyRun_FileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4D9A95: PyRun_SimpleFileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4DA39D: Py_Main (in /usr/bin/python2.7)
==5679==    by 0x5F4BEAC: (below main) (libc-start.c:228)
==5679==  Address 0x65e3170 is 0 bytes after a block of size 112 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==5679==    by 0x839BD52: elps::LabNetwork::add_new_node() (LabNetwork.cpp:144)
==5679==    by 0x839BDCA: elps::LabNetwork::populate(int) (LabNetwork.cpp:138)
==5679==    by 0x8113AB4: __pyx_f_5cyelp_12PyLabNetwork_Populate(__pyx_obj_5cyelp_PyLabNetwork*, int, int) (cyelp.cpp:10216)
==5679==    by 0x81070B3: __pyx_pw_5cyelp_12PyLabNetwork_5Populate(_object*, _object*) (cyelp.cpp:10281)
==5679==    by 0x4EB165: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4D980C: PyRun_FileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4D9A95: PyRun_SimpleFileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4DA39D: Py_Main (in /usr/bin/python2.7)
==5679==    by 0x5F4BEAC: (below main) (libc-start.c:228)
==5679==
==5679== Invalid read of size 8
==5679==    at 0x812DB11: elps::ALabNode::SetPyObj(_object*) (ALabNetBinding.cpp:31)
==5679==    by 0x8113B2C: __pyx_f_5cyelp_12PyLabNetwork_Populate(__pyx_obj_5cyelp_PyLabNetwork*, int, int) (cyelp.cpp:10112)
==5679==    by 0x81070B3: __pyx_pw_5cyelp_12PyLabNetwork_5Populate(_object*, _object*) (cyelp.cpp:10281)
==5679==    by 0x4EB165: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4D980C: PyRun_FileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4D9A95: PyRun_SimpleFileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4DA39D: Py_Main (in /usr/bin/python2.7)
==5679==    by 0x5F4BEAC: (below main) (libc-start.c:228)
==5679==  Address 0x65e3170 is 0 bytes after a block of size 112 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==5679==    by 0x839BD52: elps::LabNetwork::add_new_node() (LabNetwork.cpp:144)
==5679==    by 0x839BDCA: elps::LabNetwork::populate(int) (LabNetwork.cpp:138)
==5679==    by 0x8113AB4: __pyx_f_5cyelp_12PyLabNetwork_Populate(__pyx_obj_5cyelp_PyLabNetwork*, int, int) (cyelp.cpp:10216)
==5679==    by 0x81070B3: __pyx_pw_5cyelp_12PyLabNetwork_5Populate(_object*, _object*) (cyelp.cpp:10281)
==5679==    by 0x4EB165: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4D980C: PyRun_FileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4D9A95: PyRun_SimpleFileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4DA39D: Py_Main (in /usr/bin/python2.7)
==5679==    by 0x5F4BEAC: (below main) (libc-start.c:228)
==5679==
==5679== Invalid write of size 8
==5679==    at 0x8134CE1: elps::ALabSiteEvent::SetPyObj(_object*) (ALabSite.cpp:135)
==5679==    by 0x8107DC3: __pyx_f_5cyelp_15PyLabNetBinding_setup_pyobjects(__pyx_obj_5cyelp_PyLabNetBinding*) (cyelp.cpp:13361)
==5679==    by 0x811C55F: __pyx_f_5cyelp_15PyLabNetBinding_Populate1(__pyx_obj_5cyelp_PyLabNetBinding*, _object*, _object*, int, int) (cyelp.cpp:13677)
==5679==    by 0x81018E0: __pyx_pw_5cyelp_15PyLabNetBinding_13Populate1(_object*, _object*, _object*) (cyelp.cpp:13778)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x47CC79: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x80F6969: cy_call_func_void (cyelp.cpp:2937)
==5679==  Address 0x6e66128 is 0 bytes after a block of size 152 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==5679==    by 0x83924E2: elps::LabSiteEvent::New(elps::LabNode*) (LabSiteEvent.cpp:108)
==5679==    by 0x83888FF: elps::LabNetBinding::Populate(std::vector<double, std::allocator<double> >&, std::vector<elps::LabSiteBase*, std::allocator<elps::LabSiteBase*> >&, bool) (LabNetBinding.cpp:154)
==5679==    by 0x811C550: __pyx_f_5cyelp_15PyLabNetBinding_Populate1(__pyx_obj_5cyelp_PyLabNetBinding*, _object*, _object*, int, int) (cyelp.cpp:13668)
==5679==    by 0x81018E0: __pyx_pw_5cyelp_15PyLabNetBinding_13Populate1(_object*, _object*, _object*) (cyelp.cpp:13778)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x47CC79: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==
==5679== Invalid read of size 8
==5679==    at 0x8134CF2: elps::ALabSiteEvent::SetPyObj(_object*) (ALabSite.cpp:137)
==5679==    by 0x8107DC3: __pyx_f_5cyelp_15PyLabNetBinding_setup_pyobjects(__pyx_obj_5cyelp_PyLabNetBinding*) (cyelp.cpp:13361)
==5679==    by 0x811C55F: __pyx_f_5cyelp_15PyLabNetBinding_Populate1(__pyx_obj_5cyelp_PyLabNetBinding*, _object*, _object*, int, int) (cyelp.cpp:13677)
==5679==    by 0x81018E0: __pyx_pw_5cyelp_15PyLabNetBinding_13Populate1(_object*, _object*, _object*) (cyelp.cpp:13778)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x47CC79: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x80F6969: cy_call_func_void (cyelp.cpp:2937)
==5679==  Address 0x6e66128 is 0 bytes after a block of size 152 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==5679==    by 0x83924E2: elps::LabSiteEvent::New(elps::LabNode*) (LabSiteEvent.cpp:108)
==5679==    by 0x83888FF: elps::LabNetBinding::Populate(std::vector<double, std::allocator<double> >&, std::vector<elps::LabSiteBase*, std::allocator<elps::LabSiteBase*> >&, bool) (LabNetBinding.cpp:154)
==5679==    by 0x811C550: __pyx_f_5cyelp_15PyLabNetBinding_Populate1(__pyx_obj_5cyelp_PyLabNetBinding*, _object*, _object*, int, int) (cyelp.cpp:13668)
==5679==    by 0x81018E0: __pyx_pw_5cyelp_15PyLabNetBinding_13Populate1(_object*, _object*, _object*) (cyelp.cpp:13778)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x47CC79: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==
==5679== Invalid read of size 8
==5679==    at 0x8134D04: elps::ALabSiteEvent::SetPyObj(_object*) (ALabSite.cpp:139)
==5679==    by 0x8107DC3: __pyx_f_5cyelp_15PyLabNetBinding_setup_pyobjects(__pyx_obj_5cyelp_PyLabNetBinding*) (cyelp.cpp:13361)
==5679==    by 0x811C55F: __pyx_f_5cyelp_15PyLabNetBinding_Populate1(__pyx_obj_5cyelp_PyLabNetBinding*, _object*, _object*, int, int) (cyelp.cpp:13677)
==5679==    by 0x81018E0: __pyx_pw_5cyelp_15PyLabNetBinding_13Populate1(_object*, _object*, _object*) (cyelp.cpp:13778)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x47CC79: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x80F6969: cy_call_func_void (cyelp.cpp:2937)
==5679==  Address 0x6e66128 is 0 bytes after a block of size 152 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==5679==    by 0x83924E2: elps::LabSiteEvent::New(elps::LabNode*) (LabSiteEvent.cpp:108)
==5679==    by 0x83888FF: elps::LabNetBinding::Populate(std::vector<double, std::allocator<double> >&, std::vector<elps::LabSiteBase*, std::allocator<elps::LabSiteBase*> >&, bool) (LabNetBinding.cpp:154)
==5679==    by 0x811C550: __pyx_f_5cyelp_15PyLabNetBinding_Populate1(__pyx_obj_5cyelp_PyLabNetBinding*, _object*, _object*, int, int) (cyelp.cpp:13668)
==5679==    by 0x81018E0: __pyx_pw_5cyelp_15PyLabNetBinding_13Populate1(_object*, _object*, _object*) (cyelp.cpp:13778)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x47CC79: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==
==5679== Invalid read of size 8
==5679==    at 0x812DAF0: elps::ALabNode::GetPyObj() (ALabNetBinding.cpp:24)
==5679==    by 0x811985B: __pyx_f_5cyelp_9PyLabNode_GetNeighborAt(__pyx_obj_5cyelp_PyLabNode*, int, int) (cyelp.cpp:9483)
==5679==    by 0x8107413: __pyx_pw_5cyelp_9PyLabNode_17GetNeighborAt(_object*, _object*) (cyelp.cpp:9540)
==5679==    by 0x4EB165: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4F2DFF: ??? (in /usr/bin/python2.7)
==5679==    by 0x44A175: PyObject_Call (in /usr/bin/python2.7)
==5679==    by 0x80F3A68: __pyx_f_5cyelp_callback(void*, void*) (cyelp.cpp:16922)
==5679==    by 0x80EF77A: __pyx_f_5cyelp_14PyLabSiteEvent_RealizeEvent(__pyx_obj_5cyelp_PyLabSiteEvent*, double, double, int) (cyelp.cpp:21478)
==5679==    by 0x80FBA43: __pyx_pw_5cyelp_14PyLabSiteEvent_21RealizeEvent(_object*, _object*, _object*) (cyelp.cpp:21568)
==5679==    by 0x4EAA3A: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==  Address 0x7c81b50 is 0 bytes after a block of size 112 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)
==5679==    by 0x839BD52: elps::LabNetwork::add_new_node() (LabNetwork.cpp:144)
==5679==    by 0x839BDCA: elps::LabNetwork::populate(int) (LabNetwork.cpp:138)
==5679==    by 0x8113AB4: __pyx_f_5cyelp_12PyLabNetwork_Populate(__pyx_obj_5cyelp_PyLabNetwork*, int, int) (cyelp.cpp:10216)
==5679==    by 0x81070B3: __pyx_pw_5cyelp_12PyLabNetwork_5Populate(_object*, _object*) (cyelp.cpp:10281)
==5679==    by 0x4EB165: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4EB221: PyEval_EvalFrameEx (in /usr/bin/python2.7)
==5679==    by 0x4F1DAF: PyEval_EvalCodeEx (in /usr/bin/python2.7)
==5679==    by 0x4D980C: PyRun_FileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4D9A95: PyRun_SimpleFileExFlags (in /usr/bin/python2.7)
==5679==    by 0x4DA39D: Py_Main (in /usr/bin/python2.7)
==5679==    by 0x5F4BEAC: (below main) (libc-start.c:228)
==5679==
==5679== Invalid read of size 4
==5679==    at 0x545FFF: PyObject_Free (in /usr/bin/python2.7)
==5679==    by 0x429D04: ??? (in /usr/bin/python2.7)
==5679==    by 0x57B728: PyDict_SetItem (in /usr/bin/python2.7)
==5679==    by 0x573998: _PyModule_Clear (in /usr/bin/python2.7)
==5679==    by 0x535D36: PyImport_Cleanup (in /usr/bin/python2.7)
==5679==    by 0x568AEB: Py_Finalize (in /usr/bin/python2.7)
==5679==    by 0x4DA1E4: Py_Main (in /usr/bin/python2.7)
==5679==    by 0x5F4BEAC: (below main) (libc-start.c:228)
==5679==  Address 0x71f3020 is not stack'd, malloc'd or (recently) free'd
==5679==
...

Извините за расплывчатый вопрос, спасибо за вашу помощь.

1

Решение

Valgrind работает, отключая распределитель и сохраняя информацию о распределении / доступе, поэтому распределение будет отличаться от того, когда программа работает нормально. Тем не менее, нет необходимости вызывать сбой программы; просто исправьте ошибки, которые сообщает valgrind:

==5679== Invalid write of size 8
==5679==    at 0x812DB01: elps::ALabNode::SetPyObj(_object*) (ALabNetBinding.cpp:27)
...
==5679==  Address 0x65e3170 is 0 bytes after a block of size 112 alloc'd
==5679==    at 0x4C286E7: operator new(unsigned long) (vg_replace_malloc.c:287)

Это указывает на то, что elps::ALabNode::SetPyObj(_object*) пишет за концом объекта, который обычно портит память о том, что находится после этого объекта. (Например, malloc внутренние структуры.) Исправьте эту проблему и все остальные сообщили, и это, вероятно, решит сбой.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector