在读取输入文件时更新C数组

时间:2012-10-18 01:03:03

标签: python cython arrays

我现在使用cython读取输入文件,将字符串转换为int并将它们存储在c数组(而不是列表)中以节省空间。我的代码看起来像这样:

cdef long p[10000000]
cdef long i
i = 0
f = open(filename, 'r')
for line in f:
    temp = map(int, line.split())
    p[i] = temp[0]
    i = i + 1
f.close()

但是,当我引用数组p时,程序总是被中止。不知何故,数组未被“定义”,因为内存使用率非常低。但是,如果我正在做

,它会起作用
cdef i
for i in range(0, 1000):
    p[i] = i

1 个答案:

答案 0 :(得分:1)

我的猜测:

  • 您发布的代码实际上包含在一个函数中,在这种情况下p被分配在堆栈上,一旦给定函数返回,对p的访问就是非法的。
  • 您没有检查i是否有溢出,如果i > 1000000会发生什么?
  • 尝试在堆栈上分配1M的8字节整数可能超出允许的范围,请检查ulimit -a

总体而言,OP中没有足够的信息,例如:

  • 是函数模块或内容中的顶级代码吗?
  • 程序如何中止(SEGV?)
  • 在什么情况下引用p
  • 你用什么os / arch?

我无法用Python 2.7.3 Cython重新编写你的问题0.17.2 gcc 4.7.2 linux 3.6.9 x86-64