Приведенная ниже программа аварийно завершает работу, когда я собираю ее в Выпуске x64 (все остальные конфигурации работают нормально).
Я делаю это неправильно или это проблема OpenMP?Обоснованные обходные пути высоко ценятся.
Воспроизведение сборки проекта (консольного приложения) с кодом ниже.Сборка с опциями / openmp и / GL и (/ O1 или / O2 или / Ox) в конфигурации Release x64.То есть поддержка OpenMP и оптимизация C ++ должны быть включены.Результирующая программа должна (не должна) аварийно завершать работу.
#include <omp.h>
#include <vector>
class EmptyClass
{
public:
EmptyClass() {}
};
class SuperEdge
{
public:
SuperEdge() {mp_points[0] = NULL; mp_points[1] = NULL;}
private:
const int* mp_points[2];
};
EmptyClass CreateEmptyClass(SuperEdge s)
{
return EmptyClass();
}
int main(int argc, wchar_t* argv[], wchar_t* envp[])
{
std::vector<int> v;
long count = 1000000;
SuperEdge edge;
#pragma omp parallel for
for(long i = 0; i < count; ++i)
{
EmptyClass p = CreateEmptyClass(edge);
#pragma omp critical
{
v.push_back(0);
}
}
return 0;
}