2

我有一些 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 函数 ( cStuff) 在其他 C 代码中编译和运行时始终按预期运行,其返回值完全由输入确定(不涉及随机数生成)。它使用 s 在堆中分配浮点数组malloc(),而不是free()s,因为 C 和 Python 代码cStuff都在完成后终止执行。但是,当我从 Python 中调用该函数时,有时(例如 5 个中的 1 个)会发生内存损坏并cStuff返回无意义的结果,就好像 C 程序分配的内存被覆盖了一样。调用 C 函数时数组 a 不会损坏,因为cStuff在任何情况下都会打印正确的值。知道什么可能导致这种情况吗?谢谢

4

1 回答 1

3

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

你试过在 Valgrind 下运行它吗?

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

像这样运行它:

> valgrind python script.py

于 2013-02-15T22:16:51.037 回答