libSBML 分段错误在 Python 之外__init__
libSBML segmentation fault in python outside __init__
我正在尝试使用 python (2.x) 中的 libSBML 将模型导出到一些自定义表示中,但我遇到了一个我不明白的错误。我可以在 init 方法中很好地访问从模型 (self.sbSpecies) 中提取的物种列表,但尝试在任何其他方法中执行相同的操作会导致分割错误。这是最小的示例(需要此存档中的"yeast_7.11.xml"文件:yest7.11):
#! /usr/bin/env python
from libsbml import *
class Exporter(object):
def __init__(self, path_to_file):
reader = SBMLReader()
sbmldoc = reader.readSBMLFromFile(path_to_file)
self.sbModel = sbmldoc.getModel()
self.sbSpecies = [x for x in self.sbModel.getListOfSpecies()]
print 'init:', self.sbSpecies[0]
def debug(self):
print 'debug:', self.sbSpecies[0]
exporter = Exporter('yeast_7.11.xml')
species = exporter.debug()
尝试运行它给了我:
$ ./minimal_example.py
init: <Species s_0001 "(1->3)-beta-D-glucan [cell envelope]">
Segmentation fault
来自 gdb(我不懂 C 或 C++,所以我无法真正破译发生了什么)
(gdb) run ./minimal_example.py
Starting program: /usr/bin/python ./minimal_example.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
init: <Species s_0001 "(1->3)-beta-D-glucan [cell envelope]">
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5ebffe0 in ?? () from /usr/lib/python2.7/dist-packages/libsbml/_libsbml.so
(gdb) backtrace
#0 0x00007ffff5ebffe0 in ?? () from /usr/lib/python2.7/dist-packages/libsbml/_libsbml.so
#1 0x0000000000502be0 in PyObject_CallFunction ()
#2 0x00000000004f8aa9 in _PyObject_GenericGetAttrWithDict ()
#3 0x00000000004ce145 in ?? ()
#4 0x00000000004cd95f in ?? ()
#5 0x000000000052c6d5 in PyEval_EvalFrameEx ()
#6 0x000000000056d0aa in ?? ()
#7 0x00000000004d9854 in ?? ()
#8 0x00000000004da29f in PyEval_CallObjectWithKeywords ()
#9 0x0000000000599269 in ?? ()
#10 0x00000000005165dc in PyObject_Str ()
#11 0x00000000005b52e3 in ?? ()
#12 0x000000000051694b in PyFile_WriteObject ()
#13 0x000000000052ffdd in PyEval_EvalFrameEx ()
#14 0x000000000052cf32 in PyEval_EvalFrameEx ()
#15 0x000000000055c594 in PyEval_EvalCodeEx ()
#16 0x00000000005b7392 in PyEval_EvalCode ()
#17 0x0000000000469663 in ?? ()
#18 0x00000000004699e3 in PyRun_FileExFlags ()
#19 0x0000000000469f1c in PyRun_SimpleFileExFlags ()
#20 0x000000000046ab81 in Py_Main ()
#21 0x00007ffff7817ec5 in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#22 0x000000000057497e in _start ()
知道为什么从不同的方法访问相同的对象(self.sbSpecies列表)会导致如此不同的行为吗?我该如何修复它(除了扔掉物体)?
我设法通过添加 self 来解决这个问题。 到 sbmldoc。
似乎来自self.sbSpecies的libSBML对象仍然指向sbmldoc中的某些内容,但是由于某种原因,python不会跟踪它并破坏sbmldoc,除非被告知不要这样做。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- GCC对可能有效的代码抛出init list生存期警告
- 我可以在 C++ 中的函数体之外进行操作吗?
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何在模板类之外使用模板参数?
- 通过函数指针定义类范围之外的方法
- 与序列之外的值进行比较
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 为什么除了继承聚合结构之外,结构为空,无法聚合初始化?
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 除了构造函数之外,还创建 QLabel
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 为什么我的变量存在于其范围之外
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 在模板类之外定义友元函数的正确方法是什么?
- 如何在循环之外重新输入变量
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 在类 (C++) 之外设置 const int 成员变量