5

現在、cython を使用して入力ファイルを読み取り、文字列を int に変換し、(リストではなく) ac 配列に格納してスペースを節約しています。私が持っているコードは次のようになります。

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
4

1 に答える 1

1

私の推測:

  • あなたが投稿したコードは実際には関数にラップされています。その場合p、スタックに割り当てられ、指定された関数が戻るとすぐに、へのアクセスpは不正になります。
  • iオーバーフローをチェックしませんi > 1000000
  • スタックに 1M の 8 バイト整数を割り当てようとすると、許容範囲を超えている可能性があります。確認してくださいulimit -a

全体として、OP には十分な情報がありません。たとえば、次のようになります。

  • そのコードはモジュールまたは関数のコンテンツのトップレベルですか?
  • プログラムはどのように中止されますか (SEGV?)
  • pどの文脈で言及していますか?
  • どのOS /アーキテクチャを使用していますか?

Python 2.7.3 Cython 0.17.2 gcc 4.7.2 linux 3.6.9 x86-64 で問題を再現できませんでした

于 2013-01-01T12:32:49.637 に答える