我正在尝试访问使用ctypes返回结构指针的C函数。我正在使用EPD的32位ipython。我在64位CentOS机器上,但我必须使用32位Python,因为共享库是32位。当我尝试获取结构指针时,我遇到了分段错误。我不需要访问struct字段,因为我只使用struct作为另一个C函数的输入。代码看起来像这样。
from ctypes import *
libfoo = CDLL("libfoo.so")
func1 = libfoo.func1
func2 = libfoo.func2
func1.restype = c_void_p
obj = func1() # This is where it stops with segfault
func2 (data, obj)
C代码
typedef struct
{
int int1;
int int2;
float float1;
float *arr;
fftwf_plan fft;
} mystruct;
mystruct *func1(void)
{
mystruct *bar = (mystruct *) malloc (sizeof(mystruct));
bar->int1 = 1;
bar->int2 = 2;
bar->float1 = 1.0;
....
bar->arr = (float *) fftwf_malloc (sizeof(float) * (FFT_LEN + 2));
bar->fft = fftwf_plan_dft_r2c_1d (FFT_LEN, ch->arr, (fftwf_complex *)ch->arr, FFTW_MEASURE);
return bar;
}
void func2 (float *data, mystruct *bar)
{
....
}
我也试过创建一个ctypes结构对象,但仍然遇到了段错误。如果可能的话,我想简单地将指针传递给func2,而不必创建一个ctypes结构。我已经阅读了几篇有类似问题的帖子,但没有一个真正匹配。