0
我正在使用cython与C++编译器,并且出现奇怪的分段错误等。使用cython与C++访问结构中的向量的怪异bug
我的问题可以总结与此代码段:
from libc.stdlib cimport malloc,free
from libcpp.vector cimport vector
from libcpp.string cimport string
cdef struct vstruct:
int a
double b
vector[int] v
cpdef main():
cdef vstruct* vptr
vptr = <vstruct*> malloc(sizeof(vstruct))
vptr[0].v = [1,2]
print vptr[0].v
print vptr[0].v
main()
产生的输出:
[1,2]
[0,0]
因此,什么在这里发生? print语句是否改变了结构体中的向量?我很困惑
精彩。 我试图做到这一点,但Cython抱怨关键字new。我不知道cppclass关键字。非常感谢你。 那么,何时以及如何使用malloc来分配堆上的内存?用cython C++中的结构来做这件事是否合理? –
malloc只有对于有一个微不足道的构造函数/析构函数的东西才真正确定。你的结构在没有vector的情况下会很好,但是因为vector需要用C++方式管理内存,所以它需要被初始化和销毁。 – DavidW