我在我的应用程序中遇到了内存泄漏并将其固定下来 与vtk相关的东西。我在Windows 7上使用vtk 6.1.0,使用64位的Visual Studio 2012。
我遇到了更多vtk算法的行为。 绝对不是操作系统与内存相关,而是vtk。似乎每次调用update vtk都会创建对象并将它们放入一种更新队列中,最后不会删除。请考虑以下代码:
#include <vtkImageConstantPad.h>
#include <vtkImageData.h>
#include <ctime>
int main(int argc, char *argv[])
{
int c=0;
clock_t start;
size_t iterations = 1000;
while (c != '.'){
c = getchar();
start = clock();
for(size_t i=0; i<iterations; ++i){
vtkImageConstantPad* pad = vtkImageConstantPad::New();
vtkImageData* test = vtkImageData::New();
test->SetExtent(0,1,0,1,0,1);
test->AllocateScalars(VTK_FLOAT,1);
pad->SetInputData(test);
pad->SetOutputWholeExtent(0,2,0,2,0,2);
pad->Update(); //this is what makes it bad
pad->Delete();
test->Delete();
}
std::cout << "Time for " << iterations << ": " << static_cast<double>(clock() - start) / CLOCKS_PER_SEC << "sec" << std::endl;
}
return 0;
}
我的输出是:
Time for 1000: 0.816sec
Time for 1000: 1.879sec
Time for 1000: 3.454sec
etc.
因此,每次调用update()
会消耗更多内存和更多时间,尽管for循环范围中的所有对象都会被销毁。任何人都可以在其他平台上确认这一点,或者知道如何解决这个问题吗?
答案 0 :(得分:3)
经过进一步调查后,我发现所有机器上都没有出现此问题。 最后,我发现我的Bitdefender Antivirus在某种程度上搞乱了该程序并导致了这种奇怪的行为。当我关闭它时,一切都按预期工作。