我正在尝试将每个thead分成一个单独的数组。但是,当我尝试为其赋值时,会给出错误:错误:无效转换为'int'到'int *'[-fpermissive] 这是代码:
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
无法理解为什么不允许分配的问题?
答案 0 :(得分:1)
这对我来说似乎是个错误。我可以在Ubuntu cython
上使用0.20.1post0
版本14.04.4
重现它。它是由%
操作引起的。如果你删除两次出现,它应该可以正常工作。
如果我使用cython
编译上面的代码,则生成的C代码包含以下行
int * __pyx_parallel_temp1 = 1;
导致此问题,因为int
已分配给int*
。
我假设您使用g++
进行编译,在这种情况下会引发错误。使用gcc
只会在我的系统上发出警告,这应该没问题。或者,您可以将标记-fpermissive
传递给g++
以使其正常工作。
因此,以下内容对我有用:
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`