2017-09-04 24 views
1

所以我的問題是,我試圖將圖像數據轉換爲連續數組傳遞給C庫,但由於某種原因,numpy給太長的數組分段錯誤。看一下例子嘗試將numpy數組與ctypes轉換爲C給出分割錯誤

data = np.ascontiguousarray(np.array([1]*10000, dtype=np.float32)/255).ctypes.data_as(POINTER(c_float)) 
print data.contents.value # ok 

data = np.ascontiguousarray(np.array([1]*1000000, dtype=np.float32)/255).ctypes.data_as(POINTER(c_float)) 
print data.contents.value #giving segmentation fault 
+0

我對這些庫並不熟悉,但可能您發現了一個numpy錯誤。 – Retr0id

回答

1

我相信這是因爲你的一個線建設中,numpy的數組對象沒有持有對它的引用,所以它被垃圾回收,那麼你正在嘗試取消引用野指針。我想你的代碼,並通過破壞線分成兩個避免段錯誤 - 一個行創建numpy的陣列,然後是第二個,以獲得指針到下面的存儲:

x = np.ascontiguousarray(np.array([1]*10000000, dtype=np.float32)/255) 
data = x.ctypes.data_as(POINTER(c_float)) 
print data.contents.value # no more segmentation fault 

我想更大的存儲器塊是更積極地收集,因此行爲的差異取決於大小。我還必須增加內存大小才能在我的機器上獲得段錯誤。

相關問題