为什么此代码会生成SIGSEGV异常?我使用QT Creator,C ++,Openmp。
// myObj : a class name
vector <myObj> objVector;
.......
void MainWindow::drawScreen()
{
omp_set_num_threads(objVector.size());
#pragma omp parallel private (objVector)
{
int id = omp_get_thread_num();
if(id > 0) {
bool collision = false;
int i = id-1;
objVector[i].update();
}
}
this->repaint();
}
在myObj课程中:
void myObject::update() {
int x = this->X; **// when I run debugging, SIGSEGV occurs this line!!!!!!!**
int y = this->Y;
}
答案 0 :(得分:0)
private
子句为类型变量调用默认构造函数。换句话说,每个线程都在通过其default-constructor初始化的{em> new (空)实例std::vector
上运行。
对于向量的 copy-construction ,您应该使用firstprivate
子句:
#pragma omp parallel firstprivate(objVector)
// ~~~~~~~~~~~^
尽管如此,我想你真的打算让这个变量为shared
一个:
#pragma omp parallel shared(objVector)
// ~~~~~^