python - glibc 检测到 *** python : double free or corruption (! prev) SWIG

标签 python swig glibc

在 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 接口(interface)文件只是 algol.hpp 的一个包含:

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

你怎么看这件事? :S

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

最佳答案

what is happening?

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

按照 awoodland 的建议,在 Valgrind 下运行 python,然后查看发生损坏或双重释放的

关于python - glibc 检测到 *** python : double free or corruption (! prev) SWIG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559791/

相关文章:

java - Google Cloud Storage 通过 App Engine 定价

python - 我可以修改漂亮的 soup 标签中的文本而不将其转换为字符串吗?

c# - SWIG 和 C# : insert empty C# class

java - 以编程方式切换 API 命名约定

我可以修改动态链接器并在不重新编译 glibc 的情况下使用吗?

c - 在 Linux 中构建系统调用。内核 > 3.x.x

Python Pandas 根据格式替换字符串

Python swig - 从 ctypes 指针创建 swig 包装实例

c - 如果 memcpy 实际上不返回任何内容,如何以 memcpy 作为第一个参数调用 memset?

python - 使用唯一列值作为键将 Pandas Dataframe 转换为_dict()