2016-04-12 10 views
0

私はそれぞれの配列を別々の配列に割り当てようとしています。私はそれに値を代入しようとすると、しかし、私にエラーを与える:エラー:「int型*」から 'int型から無効な変換[-fpermissive] は、ここでは、コードです:prangeの配列に値を代入できません

cdef void test(int size,int num,int len,int height,int *f,int n_f): 
    cdef int k 
    cdef Node* tree_root 
    cdef int i 
    cdef int *a 

    for i in prange(num,nogil=True,num_threads=2): 
     a=<int *>malloc(sizeof(int)*size) 
     srand(rand()) 
     #a[0]=rand()%len #if uncommented gives error 
     with gil: 
      for k in range(size):#if uncommented gives error 
       a[k]=rand()%len 

はなぜ問題を理解できませんでした割り当てが許可されていない??

答えて

1

これは私のバグのようです。 Ubuntu 14.04.4cythonバージョン0.20.1post0と再現できます。これは、%操作によって発生します。両方の発生を取り除くとうまくいくはずです。

Iはcythonと上記のコードをコンパイルする場合に生成されたCコードは、intint*に割り当てられているので、問題を引き起こす次の行

int * __pyx_parallel_temp1 = 1; 

を含有します。

g++でコンパイルすると、この場合エラーが発生することが想定されます。 gccを使用すると、私のシステムでは正常であるはずの警告のみが表示されます。あるいは、フラグ-fpermissiveg++に渡して、動作させることもできます。

cython code.pxy 
g++ code.c -c `pkg-config --libs --cflags python2` -fpermissive 

いたよう:

cython code.pxy 
gcc code.c -c `pkg-config --libs --cflags python2` 
+0

は、それが働いて取得する-fpermissiveフラグを使用し...ありがとう:したがって、私のために働い以下

)......はずですバグが提起されます。 –

関連する問題