我想释放分配的内存,该变量是一个指向指针的变量(或“双指针”——不要与指向双数据类型的指针混淆。)
假设指向指针的指针是**ptr
并且(为简单起见)它是一个 10x10 的整数数组。按照文档,我看到一种分配空间的方法如下。
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 错误——表明我正在尝试释放未分配的内存。
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
这个问题非常类似于与 C 指针有关的这个问题的 Cython 类似物。