内存泄漏- OpenMP
Memory Leak - OpenMP
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;
}
我试图设置并行calc共享在openmp,(我认为这是问题,不是吗?),但当我这样做,我得到错误MainController::parallelCalc is not a variable in clause shared
。谁能给我一个提示,如何解决这个记忆问题?
由于代码不完整,我们无法重现您的错误。
我看到一个潜在的记忆丧失。您有一个新的Calculator调用,但没有匹配的delete。
此外,可能还有其他通过间接方式静态分配的内存无法释放。
要弄清楚发生了什么,一种方法是在一种模式下使用valgrind,它会显示它认为被泄露的特定项。我通常使用
valgrind——verbose——num-callers=30——track-fds=yes——leak-check=full——show-reachable=yes
这将转储更多的信息,允许您跟踪valgrind认为泄漏来自何处。使用valgrind提供的堆栈跟踪来确定您是否可以安全地忽略"泄漏",因为您无法对此做任何事情,或者您是否需要修复正在编写的代码。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- OpenMP阵列性能较差
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 这个极客对极客的trie实现是否存在内存泄漏问题
- OpenMP:并行更新数组总是需要减少数组吗
- 尽管遵循了规则,内存泄漏在哪里
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- 为什么调用堆栈数组会导致内存泄漏
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 查找最近配对时的OpenMP竞赛条件
- C++OpenMP代码内存泄漏
- 结合 OpenMP、英特尔 MKL 和 MSVC 编译器时出现大量内存泄漏
- Eigen+std::vector+OpenMP的内存泄漏
- 内存泄漏- OpenMP