5

在 SWIG 中为我的 C++ 算法编写了一个包装器后,当我在导入模块后退出 Python 解释器时,我经常收到此错误:

    $ python
    iPython 2.5.6 (r256:88840, Mar 10 2012, 14:05:15) 
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>from algol import *
    >>> 
    *** glibc detected *** python: double free or corruption (!prev): 0x0000000001e42430 ***

然后我必须按 Ctrl+C 才能重新获得控制权……发生了什么事?

我正在运行以下命令来构建我的 SWIG 包装器:

$NAME=algol
swig -c++ -python $NAME.i
g++ -fpic -c $NAME.cpp $NAME.hpp $NAME\_wrap.cxx -I/usr/local/include/python2.5
g++ -Xlinker -zmuldefs -shared $NAME.o $NAME\_wrap.o -o _$NAME.so

我的 swig 接口文件只是 algol.hpp 的一个包含:

%module algol
%{
#include "algol.hpp"
%}
%include "algol.hpp"

你怎么看待这件事?:S

编辑:在此处附加示例源代码-> http://pastebin.com/q210vEAs

4

1 回答 1

1

怎么了?

正是消息所说的:某些代码执行了双重释放,或者其他一些堆损坏。

正如 awoodland 所建议的那样,在 Valgrind 下运行 python,并查看发生损坏或双重释放的位置。

于 2012-05-12T15:39:46.590 回答