如何在Cython中正确释放指针指针?

时间:2017-05-01 13:52:27

标签: pointers compiler-errors cython free cythonize

我想释放内存,分配一个指向指针的变量(或者#34; double pointer" - 不要与指向double数据类型的指针混淆。)

假设指针指针是**ptr并且(为简单起见)它是一个10x10的整数数组。在documentation之后,我看到分配空间的一种方法如下。

from cpython.mem cimport PyMem_Malloc, PyMem_Free

## Allocate memory
cdef int **ptr = <int **>PyMem_Malloc(sizeof(int *) * 10)
cdef i;
for i in range(10):
    ptr[i] = <int *>PyMem_Malloc(sizeof(int) * 10)

## Free memory
for i in range(10):
    PyMem_Free(<void *>ptr[i])
PyMem_Free(<void *>ptr)

文档没有明确提及释放指针到指针的正确方法。根据我在C编程的经验,我猜这应该是推荐的方式。但是,自由内存语法似乎无法正常工作,因为当我编译时(使用distutils.core.setup),它似乎给了我一个熟悉的gcc-error - 表明我试图释放未分配的存储器中。

python(4522,0x7fffd08143c0) malloc: *** error for object 0x1172c8054: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

这个问题非常符合this question与C指针有关的Cython模拟。

0 个答案:

没有答案