glibc检测到*** free():无效指针:Python c++和Swig
glibc detected *** free(): invalid pointer: Python c++ and Swig
我必须运行一些用Python编写的单元测试。我们有要在c++中测试的代码,所以我把它编译成一个共享对象,并使用swig为python脚本提供了一个接口,以便调用必要的api进行测试。
现在,当我运行一个python脚本(它显然是访问我打算测试的c++代码库)时,我得到了一个"glibc检测到free():无效指针"。现在我知道有一些内存问题,要么是双重释放,要么是我正在释放一个无法访问的内存。现在我对各位专家的要求是:
1]我没有得到任何回溯(甚至没有行号),无论如何都知道问题发生在哪里?我没有得到任何信息,除了脚本在某个点突然停止并打印这样的东西
*** glibc检测到* free():无效指针:0x099e9b28 ***
我能进行回溯吗?通过设置一些旗帜可以吗?
2]我运行了valgrind:
"valgrind——leak-check=yes ./myscript.py"
我没有得到什么,只有几行:
Glibc检测到free():无效指针:0x099e9b28
25728 = = = =
==25728==条件跳转或移动取决于未初始化的值
==25728== at 0x625AEA: PyObject_Free (in/usr/lib/libpython2.3.so.1.0)
==25728== by 0x614C7F: (within/usr/lib/libpython2.3.so.1.0)
==25728== by 0x61EA53: (within/usr/lib/libpython2.3.so.1.0)
我基本上没有得到任何与我的代码相关的东西。那么,我还应该对valgrind做些什么呢?
3]我试过打印,但它实际上什么也没给我。
[4]我试过gdb:
python提示符> gdb
设置myscript.py参数
Gdb> run
这运行脚本,我不能设置任何断点,它运行并打印错误。没有绝对的帮助。还有什么我应该做与GDB?有办法设置断点吗?
非常感谢你们给我的任何一种指示。
我终于想通了!我执行命令
分析它GDB/usr/bin/python2.3 core.31685
我已经使用Google的堆检查器成功地调试了这类问题。它将为您提供分配点和释放点的堆栈跟踪。
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- 使用C++指针调用 python 函数
- 在 cpp 中嵌入 python:如何获取指向 python 函数(而不是 PyObject)的 C 指针?
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- C++ & Python:传递并返回从 python 到 c++ 的 2D 双指针数组
- 使用 Pybind11 从 Python 传递指向 C++ 的指针
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 如何在python中创建等效的结构并使用malloc更改空指针的引用
- 使用 Python、C++ 和 pybind11 返回并传递原始 POD 指针(数组)
- 如何在python脚本中使用Pybind11修改/访问C++指针
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?
- 如何在 Python 中的 SWIG Director 方法中处理空指针
- Python模拟C++指向类成员的指针
- 在python ctypes中截断了指向C++自定义类实例的指针地址
- Swig和指针问题(python)
- Boost Python:指针设置为空
- glibc检测到*** free():无效指针:Python c++和Swig