- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
C++代码 //quicktest.cpp #include #include extern "C" { int test1(PyObject *src) { char *
我正在尝试使用此函数在我的一个 c++ 程序中从 python 加载一个函数 char * pyFunction(void) { char *my_result = 0; PyObje
我在 python 3 中使用 cython 编译 c 扩展时遇到问题。它在 python 2.7 上编译和工作正常,但在 python 3.4.3 中,我在使用 3.4(anaconda 发行版)构
我正在尝试将 Python 程序嵌入到 C 程序中。我的操作系统是 Ubuntu 14.04 我尝试将 python 2.7 和 python 3.4 解释器嵌入到相同的 C 代码库中(作为单独的应用
我是一名优秀的程序员,十分优秀!