我有一些Cython代码,它实际上是外部C库的包装器,如相关文档和其他几个来源(例如here和here)中所述。我有以下Cython类定义:
import numpy
cimport numpy
cimport clib # my C library
cdef class DoStuff:
def __call__(self, array a):
cdef numpy.ndarray[float, ndim=1] npa = numpy.ascontiguousarray(a)
clib.cStuff( <float*>npa.data )
我的C函数(cStuff
)在编译并在其他C代码中运行时总是按预期运行,其返回值完全由输入决定(不涉及随机数生成)。它使用malloc()
在堆中分配float数组,而从不free()
,因为C和Python代码在cStuff
完成后终止执行。但是,当我从Python中调用函数时(有五分之一)会发生内存损坏并且cStuff
返回无意义的结果,就好像C程序分配的内存被覆盖一样。调用C函数时,数组a没有损坏,因为在任何情况下都由cStuff
打印正确的值。任何可能导致这种情况的想法?
谢谢
答案 0 :(得分:3)
我无法从代码中推断出您的问题所在。我需要更多的背景。
你试过在Valgrind下运行吗?
http://valgrind.org/info/tools.html#memcheck
像这样运行:
> valgrind python script.py