2012-03-31 14 views
0

ベクトルduring a recursion to push_back`クラスからのいくつかのインスタンスですが、残念ながらセグメンテーションフォルトが発生します。ここ再帰中のcython libcpp.vectorセグメンテーションフォールト

は、このエラーが同様に発生した簡易版です:ノー持っ

PYXファイル

from libcpp.vector cimport vector 
from cython.operator cimport dereference as deref, preincrement as inc 


cdef class Grid: 
    cdef unsigned int srow 
    cdef unsigned int erow 
    cdef unsigned int scol 
    cdef unsigned int ecol 

    def __init__(self, unsigned int srow, unsigned int erow, unsigned int scol, 
      unsigned int ecol): 
     self.srow = srow 
     self.erow = erow 
     self.scol = scol 
     self.ecol = ecol 



cdef simple_function_c(vector[Grid] &vp , unsigned int counter): 

    cdef Grid p 

    if counter == 10: 
     return 

    p = Grid(counter-1, counter, counter-1 , counter+1) 
    vp.push_back(p) 
    counter += 1 
    simple_function_c(vp, counter) 

def simple_function(): 

    cdef vector[Grid] vp 
    cdef unsigned int counter 
    cdef Grid tp 

    counter = 0 
    simple_function_c(vp, counter) 

    print vp.size() #this works and outputs 10 

    cdef vector[Grid].iterator it = vp.begin() 
    while it != vp.end(): 
     tp = deref(it) #Seg FAUL !!! 
     print tp.srow, tp.erow, tp.scol, tp.ecol 
     inc(it) 

PYファイル

from testrec import simple_function 
simple_function() 

setup.py

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

setup(ext_modules=[Extension(
        "testrec", 
        ["testrec.pyx"], 
        language="c++")], 
     cmdclass={'build_ext': build_ext}) 

アイティーアイなぜアイティーアイsが起こっている。

答えて

0

UPDATE非常に奇妙な:私はクラスが2つのフィールドのみを持っているとき、私はワンセグ障害を取得しないことに気づいただけで行う固定

cdef struct Grid: 
    unsigned int srow 
    unsigned int erow 
    unsigned int scol 
    unsigned int ecol