gpt4 book ai didi

c++ - PyString_AsString 函数中的段错误

转载 作者:行者123 更新时间:2023-11-30 02:52:46 27 4
gpt4 key购买 nike

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

你能解释一下,我的代码哪里出错了吗?

最佳答案

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

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

来自 ctypes 文档(Calling functions):

byte strings and unicode strings are passed as pointer to the memory block that contains their data (char * or wchar_t *)

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

因此函数 test1 接收到一个指向 char 的指针,最终,PyString_AsString 接收到一个指向 char 的指针,错误地转换为指向 PyObject 的指针。

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

关于c++ - PyString_AsString 函数中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18608763/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com