gpt4 book ai didi

c++ - 内存泄漏 - OpenMP

转载 作者:行者123 更新时间:2023-11-28 05:33:42 26 4
gpt4 key购买 nike

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 shared,(我认为这是问题所在,不是吗?)但是当我这样做时,我收到错误消息 MainController::parallelCalc is not a variable in clause shared 。谁能给我一个提示,如何解决这个内存问题?

最佳答案

我们无法重现您的错误,因为代码不完整。

我看到一个潜在的内存丧失。您有一个新的计算器调用,但没有匹配的删除。

此外,可能还有其他通过间接方式静态分配的内存无法释放。

弄清楚发生了什么的一种方法是在一种模式下使用 valgrind,它会向您显示它认为已泄漏的特定项目。我通常使用

valgrind --verbose --num-callers=30 --track-fds=yes --leak-check=full --show-reachable=yes

这将转储更多信息,使您能够追踪 valgrind 认为泄漏的来源。使用 valgrind 提供的堆栈跟踪,您可以确定是否可以安全地忽略“泄漏”,因为您对此无能为力,或者您是否需要修复正在编写的代码。

关于c++ - 内存泄漏 - OpenMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com