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
。
任何人都可以给我一个提示,如何解决这个记忆问题?
答案 0 :(得分:1)
由于代码不完整,我们无法重现您的错误。
我看到一个潜在的记忆丧失。您有一个新的计算器调用,但没有匹配的删除。
此外,可能存在通过间接方式静态分配的其他内存,即无法释放。
找出正在发生的事情的一种方法是在一种模式下使用valgrind,它会向你显示它认为泄露的特定项目。我通常使用
valgrind --verbose --num-callers = 30 --track-fds = yes --leak-check = full --show-reachable = yes
这将转储更多信息,允许您追踪valgrind认为泄漏来自哪里。使用堆栈跟踪valgrind让您弄清楚是否可以安全地忽略&#34;泄漏&#34;因为你无法做任何事情,或者你需要修改你正在编写的代码。