我有一个C ++函数,它分配一个数组并返回它。我想在Cython中使用这个数组,然后在完成时将其删除,但Cython似乎并不满意我尝试这样做的方式。最简单的例子:
foo.hpp:
float * my_fun() { return new float[5]; }
foo.pyx:
cdef extern from "foo.hpp":
float * my_fun()
def my_other_fun():
cdef float * foo = my_fun()
del foo
当我尝试cython -a foo.pyx
时,我收到错误Deletion of non-Python, non-C++ object
。是什么赋予了?此外,如果有办法在不必分配堆内存的情况下实现这一目标,我全心全意。
答案 0 :(得分:3)
应始终以与分配内存相同的方式释放内存。你在做你正在做的事情时遇到麻烦。
我可以想到解决这个问题的两种方法:
1)在C ++中有一个删除函数,你可以调用它来释放内存。
2)直接从系统服务或库调用(例如malloc)分配内存,并使用相应的函数释放内存。