我有一个班级
Split
,它有一个类型为const Params & params
的字段。变量在实例化时设置:
class Split
{
private:
// Problem parameters
const Params & params;
// ...
}
在实例化时一切似乎都很好,但稍后,当实例尝试访问其字段时,该字段是
NULL
而不是数据,正如 CLion LLDB 调试器向我展示的那样。
我每个线程都有一个
Split
实例,但据我所知,只有一个 params
变量,每个 Splits
都试图读取,但不会写入。params
,但我还没有那么绝望。
更奇怪的是,有些线程可以读取变量,有些则不能。
调试还揭示了以下内容:在函数调用之前,
Split
尝试读取 params
,params
可通过 CLion 调试访问,但一旦我在函数调用中,它就不是。这是函数调用:
#pragma omp parallel for num_threads(nMaxThreads)
for(int i=0; i < nMaxThreads; i++){
populations[i].generatePopulation();
if (params.verbose) std::cout << "----- THREAD " << omp_get_thread_num() <<" DONE WITH POPULATION INIT" << std::endl;
}
函数中导致错误的地方(
Split::generalSplit()
是从generatePopulation()
函数内部调用的)是这个:
void Split::generalSplit(Individual & indiv, int nbMaxVehicles)
{
maxVehicles = std::max<int>(nbMaxVehicles, std::ceil(params.totalDemand/params.vehicleCapacity));
// ...
}
这可能是什么,我该如何解决?