Python包装器到C函数产生分段

2024-05-23 17:51:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为C代码构建一个Python包装器

.c代码中,我定义了以下函数

double myfunction_at_k_and_z(struct background * pba,
                      struct spectra * psp,
                      struct perturbs *ppt,
                      double k,
                      double z,  
                      double * pk_ic)
{ ...body of the function ...}

.h文件中

  struct background ba;       
  struct perturbs pt;         
  struct spectra sp;          

现在我在我的.pyx文件中,在类myclass中实现一个函数

def get_myfunction(self, double k, double z):
        cdef double dummy
        result = myfunction_at_k_and_z(&self.ba, &self.sp, &self.pt, k, z, &dummy)
        return result

.pxd文件中我写到:

cdef struct background: ....
cdef struct spectra: ...
cdef struct perturbs: ...


double myfunction_at_k_and_z (background * pba, spectra * psp, perturbs *ppt, double k, double z, double * pk_ic)

其中点...表示结构的组成部分,除了一种情况外,它们在这里不相关:在struct spectra中有

int ln_k_size
double * ln_k

现在我的问题是,尽管编译了所有东西,但当我使用Python运行我的包装器并使用get_myfunction到例如myclass.get_myfunction(1., 1.)时,数组ln_k似乎有问题,它似乎有ln_k_size=0。这导致了分段错误

我在内存分配方面是否遗漏了什么? 有出路吗


Tags: and文件函数代码selfgetstructat