나는 C++ 컴파일러와 함께 cython을 사용하고 있으며 이상한 세분화 오류 등이 발생합니다.이상한 버그 cython을 사용하여 구조체에서 벡터에 액세스하는 C++
내 문제는이 코드로 요약 될 수있다 : 출력 생성
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은 사소한 생성자/소멸자가있는 물건에 대해서만 정말로 괜찮습니다. 귀하의 구조체는 벡터가 없어도 괜찮 았지만 벡터가 메모리를 관리하기 때문에 초기화되고 C++ 방식으로 파괴되어야합니다. – DavidW