• 2633阅读
  • 0回复

[提问]在qt下面是用openmp报错 [复制链接]

上一主题 下一主题
离线头文件
 

只看楼主 倒序阅读 楼主  发表于: 2017-11-25
回复本帖可获得10点威望奖励!
每人最多可获奖1次,奖池剩余10点威望 (中奖几率80%)
  1. #pragma omp parallel for num_threads(2)
  2.     for(int i = 0 ;i < y; i++){
  3.         for(int j = 0 ;j < x;j++){
  4.             QPoint point;
  5.             QColor c;
  6.             QPen pen;
  7.             float r=0,g=0,b=0;
  8.           if(values[i*x+j]>0){
  9.                r = 1 ;
  10.                g = 1 - values[i*x+j] / maxData ;
  11.                g = g<0?0:g;
  12.                b = g;
  13.            }else{
  14.                r = 1 +  values[i*x+j] / maxData ;
  15.                r = r<0?0:r;
  16.                g = r;
  17.                b = 1;
  18.            }
  19.            /* if(i==j){
  20.                 r=1;
  21.                 g=0;
  22.                 b=0;
  23.             }*/
  24.             c.setRgbF(r,g,b);
  25.             pen.setColor(c);
  26.             point.setX(startX+j);
  27.             point.setY(startY+i);
  28.             painter->setPen(pen);
  29.             //printf("i = %d\tj=%d\n",i,j);
  30.             painter->drawPoint(point);
  31.         }
  32.     }
  33. #pragma omp barrier

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