5

C++ アルゴリズムの SWIG でラッパーを作成した後、モジュールをインポートした後に 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 に答える