我想释放内存,分配一个指向指针的变量(或者#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模拟。