PyString_AsString函数中的分段错误

Segmentation fault in PyString_AsString function

本文关键字:分段 错误 函数 AsString PyString      更新时间:2023-10-16

C++ 代码

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

蟒蛇代码

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

呼叫中存在分段错误("收到的 SIGSERV"PyString_AsString。

Linux 64 位,python2.7

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

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

函数 PyString_AsString 需要一个指向 PyObject 的指针,而您正在传递一个指向 char 的指针。Python/C API 参考手册

从 ctypes 文档(调用函数):

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

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

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

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