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