下面显示的某些类型的代码导致我在通过 Cython 调用的 C++ 代码中出现内存损坏。我已经设法解决它,但想问什么是最低限度要求是多少。
认为:
CFoo是一个 C++ 类,其中一些成员set_ptr采用指向双精度的指针。Cython 类Foo拥有一个指向CFoo.- 在某种
bar方法内Foo:- 通过调用创建瞬态
numpy.array, 。afunction_returning_a_numpy_array() - 创建一个类型化的内存视图
a_view以供查看a。 - 一个指针 from
a_view被发送到CFoousingCFoo的成员set_ptr。
- 通过调用创建瞬态
片段:
cdef class Foo:
cdef CFoo *foo_imp;
...
def bar(self):
a = function_returning_a_numpy_array()
cdef double a_view[:] = a
foo_imp.set_ptr(&a_view[0])
请注意,在这个问题的上下文中,后续调用Foo将导致CFoo对该指针进行操作。
很明显,由于没有保存任何内容a,后续调用Foo's 成员可以找到areclaimed 的内存。我已经通过创建a一个成员解决了这个问题Foo。我的问题是:
这会通过使
double *(设置为&a_view[0])成为 的成员来解决Foo吗?我猜没有。这会通过使
double a_view[:](设置为a)成为 的成员来解决Foo吗?我在文档中找不到任何解决此问题的方法。