我有C++庫,其功能是從python側調用的。上述功能之一得到一個陣列上的指針,其在蟒側在[0:255]具有值並將其定義爲使用ctypes從python到C++的數據傳輸
seq1=numpy.array(image,dtype=numpy.uint8).flatten()
seq=numpy.zeros((w*h*3),dtype=numpy.uint8)
函數調用都按
myCppFunction(ctypes.c_void_p(seq.ctypes.data),
ctypes.c_void_p(seq1.ctypes.data),
...)
上C++側的功能定義爲
void myCppFunction(ushort *seq, ushort *sequence1, ...)
當我簡單地打印我收到關於C++側爲SEQ,序列1,我越來越遠高於無符號短範圍的值和零序列沒有用零填充。 編譯進行得很順利,但實際運行會導致分段錯誤。 我哪裏錯了?
您的第一個問題幾乎可以肯定是@WarrenWeckesser指出的,即您將1字節值的數組視爲2字節值。但最重要的是,請注意,'ctypes.data''可能包含未對齊的數據,或者未包含正確的字節順序......甚至可能無法寫入。「換句話說,即使它是'uint16'數組,你也不能將它傳遞給'ushort *'而不檢查任何東西。 – abarnert