查看完整版本: [-- 在qt下面是用openmp报错 --]

QTCN开发网 -> Qt基础编程 -> 在qt下面是用openmp报错 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

头文件 2017-11-25 08:56

在qt下面是用openmp报错

  1. #pragma omp parallel for num_threads(2)
        for(int i = 0 ;i < y; i++){
            for(int j = 0 ;j < x;j++){
                QPoint point;
                QColor c;
                QPen pen;
                float r=0,g=0,b=0;

              if(values[i*x+j]>0){
                   r = 1 ;
                   g = 1 - values[i*x+j] / maxData ;
                   g = g<0?0:g;
                   b = g;
               }else{
                   r = 1 +  values[i*x+j] / maxData ;
                   r = r<0?0:r;
                   g = r;
                   b = 1;
               }
               /* if(i==j){
                    r=1;
                    g=0;
                    b=0;
                }*/
                c.setRgbF(r,g,b);
                pen.setColor(c);
                point.setX(startX+j);
                point.setY(startY+i);
                painter->setPen(pen);
                //printf("i = %d\tj=%d\n",i,j);
                painter->drawPoint(point);
            }
        }
    #pragma omp barrier

单个线程的时候是可以执行的,在设置多个线程之后就出现Segmentation fault或者*** glibc detected *** ./seismicVS: malloc(): memory corruption (fast): 0x00000000021a380f ***。我如果把上面代码中的painter->setPen(pen)这句话注释掉,就可以执行通过。想请问,这到底是什么原因?


查看完整版本: [-- 在qt下面是用openmp报错 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled