PyString_AsString函数中的分段错误

时间:2013-09-04 08:19:38

标签: c++ python

C ++代码

//quicktest.cpp
#include <Python.h>
#include <new>
extern "C" 
{
    int test1(PyObject *src)
    {
    char *src1 = PyString_AsString(src);  // <-- segmentation fault
    return 0;
    } 
}

Python代码

import ctypes
test_lib = ctypes.CDLL('./quicktest.so');
test_lib.test1("test")  #  <-- segmentation fault

PyString_AsString调用中存在分段错误(“收到SIGSERV”)。

Linux 64位,python2.7

你能解释一下,我的代码中的错误在哪里?

1 个答案:

答案 0 :(得分:3)

[编辑:问题中的代码已更改]

函数PyString_AsString需要一个指向PyObject的指针,并且您正在向char传递指针。 Python/C API Reference Manual

来自ctypes文档(Calling functions):

  

字节字符串和unicode字符串作为指针传递给包含其数据的内存块(char *或wchar_t *)   

现在,在更改问题之后,在调用test1函数时,您正在不正确地将指向char的指针转换为指向PyObject的指针。

因此函数test1正在接收一个指向char的指针,并且在一天结束时,PyString_AsString正在接收一个指向char的指针,该指针被错误地转换为指向PyObject的指针。

要了解更多信息: Python C/API tutorial