python - 尝试将带有 ctypes 的 numpy 数组转换为 C 会出现段错误

标签 python c numpy ctypes

所以我的问题是我试图将图像数据转换为连续数组以将其传递给 C 库,但由于某种原因,numpy 在太长的数组上给出了段错误。看例子

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

最佳答案

我相信这是因为在您的单行构造中,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

我猜想更大的内存块会被更积极地收集,因此行为上的差异取决于大小。我还必须增加内存大小才能在我的机器上出现段错误。

关于python - 尝试将带有 ctypes 的 numpy 数组转换为 C 会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037157/

相关文章:

python - 将简单函数转换为多线程函数

python - 使用 Python 在注册表运行键中创建新值?

Python -- 正则表达式 -- 如何在两组字符串之间找到一个字符串

C HelloWorld exec 格式错误

python - undefined symbol : Py_Initialize in Ubuntu 10. 10

python - 如何解释 numpy.correlate 和 numpy.corrcoef 返回的值?

c++ - C/C++ vector 到 Numpy 数组的快速转换

python - Numpy 子数组的外部添加

python - 如何在pandas中将一列数据框拆分为多列?

c - 在自己编写扩展之前要在 C 中实现多少 lisp?