【发布时间】:2016-08-08 15:01:08
【问题描述】:
valgrind 告诉我,我的代码中有以下问题:
LEAK SUMMARY:
==18114== definitely lost: 0 bytes in 0 blocks
==18114== indirectly lost: 0 bytes in 0 blocks
==18114== possibly lost: 1,776 bytes in 3 blocks
==18114== still reachable: 2,320 bytes in 4 blocks
==18114== suppressed: 0 bytes in 0 blocks
这个问题出现在:
#pragma omp parallel for num_threads(numThreads)
在
parallelCalc= new Calculator[numOff];
#pragma omp parallel for num_threads(numThreads)
for(int i = 1; i<=numOff;i++)
{
std::stringstream sstm;
sstm << filename <<"/" << i<<".off";
std::string aktFilename = sstm.str();
Polyhedron *poly = new Polyhedron(aktFilename.c_str());
parallelCalc[i-1].init(poly,consistentTargets->points,numTarget);
parallelCalc[i-1].hfield();
delete poly;
}
我尝试在 openmp 中设置 parallelCalc 共享,(我认为这是问题所在,不是吗?)但是当我这样做时,我收到错误 MainController::parallelCalc is not a variable in clause shared。
谁能给我一个提示,如何解决这个内存问题?
【问题讨论】:
-
你有什么理由在这里使用指针吗?如果不是,您应该使用循环本地自动对象。
-
您确定问题与 omp 有关吗?如果禁用 omp,错误会消失吗?
-
是的,串行版本没有内存问题。我认为它是相同的代码,只是没有#pragma omp,openmp 为每个线程生成私有 prarallelcalc,这就是泄漏的问题,不是吗?
-
它必须是一个指针,因为我需要每个 porallelCalc 的结果。而且我只在运行时知道数组的大小。
标签: c++ memory-leaks openmp valgrind