在Python包装器中调用外部C库时出现奇怪的内存损坏



我有一些Cython代码,它实际上是一个外部C库的包装器,正如相关文档和其他几个来源(例如这里和这里)中所解释的那样。我有以下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代码中编译和运行时,我的C函数(cStuff)总是按预期运行,其返回值完全由输入决定(不涉及随机数生成)。它使用malloc()在堆中分配浮点数组,而从不使用free()s,因为C和Python代码都会在cStuff完成后终止执行。然而,当我从Python中调用函数时,有时(比如五分之一)会发生内存损坏,cStuff返回无意义的结果,就好像C程序分配的内存被覆盖了一样。调用C函数时,数组a不会损坏,因为cStuff在任何情况下都会打印正确的值。知道是什么原因造成的吗?感谢

我无法从代码中推断出问题所在。我需要更多的上下文。

你有没有试过在Valgrind手下经营这个?

http://valgrind.org/info/tools.html#memcheck

这样运行:

> valgrind python script.py

相关内容

  • 没有找到相关文章

最新更新