2

test.pyx に次のコードがあります

cdef class Test:
    cdef long long i

    def __cinit__(self, long long i):
        self.i = i

    def __truediv__(Test self, Test other):
        return Test(self.i / other.i)

短いpythonスクリプトで私はこれを持っています:

import test
print('Done')

test.pyx をコンパイルした後にスクリプトを実行すると、Windows エラー ダイアログ「python.exe has stopped working」と共に次の出力が表示されます。

Done

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

コンパイルされたコードを呼び出すことはなく、インポートするだけであることに注意してください。また、Python スクリプトの実行が完了した後にのみクラッシュが発生することにも注意してください。ilong longから just longに変更すると、エラーが解消されることに気付きました。私が欠けている基本的なものはありますか、それともlong longによる除算は必ずしも安全ではありませんか?

それが違いを生む場合、私のセットアップに関するいくつかの情報:

OS: Windows 7、64ビット

Python バージョン: 3.4.2、MSC v 1600 32 ビット

Cython バージョン: 0.22

コンパイラ: mingw32

編集:追加メモ

  • Python 2.7.9 32ビットでもテストされ、同じ結果が得られました
  • / を // に置き換えても同じ結果が得られます
  • 除算を含むすべてのコードが削除されると (コメント アウトされるか、コンパイラによって削除されるなど)、エラーは消えます。
  • 完了時に Python がクラッシュしても、コンパイルされたコードは呼び出されたときに適切に機能しているように見えます。
4

0 に答える 0