我正在尝试为每个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


无法理解为什么不允许分配的问题??

最佳答案

对我来说,这似乎是一个错误。我可以在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`

关于python - 无法以橙色为数组赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36577182/

10-11 22:12
查看更多