用C ++分配内存然后在Cython中解除分配?

时间:2014-11-14 00:02:16

标签: c++ memory-management cython

我有一个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。是什么赋予了?此外,如果有办法在不必分配堆内存的情况下实现这一目标,我全心全意。

1 个答案:

答案 0 :(得分:3)

应始终以与分配内存相同的方式释放内存。你在做你正在做的事情时遇到麻烦。

我可以想到解决这个问题的两种方法:

1)在C ++中有一个删除函数,你可以调用它来释放内存。

2)直接从系统服务或库调用(例如malloc)分配内存,并使用相应的函数释放内存。