使用VTK9.3定位内存泄漏(LEAK)

VTK在最新的版本中加入了内存泄漏检测功能,详细的编译过程查看Mac中编译、安装VTK_vtk 安装 mac-CSDN博客,本文讲述新版本新功能的编译要点

1、编译Debug版本,CMake中设置以下编译选项

(1)打开内存泄露检测功能 VTK_DEBUG_LEAKS 勾选

(2)因多个中间的lib会依赖VTK,所以将VTK编译成静态库,否则最后链接成exe的时候一些在头文件中定义的接口会报错重复定义 BUILD_SHARED_LIBS 取消勾选

(3)VTK_SMP_ENABLE_STDTHREAD 取消勾选;VTK_SMP_ENABLE_TBB 取消勾选;

VTK_SMP_ENABLE_OPENMP 和 VTK_SMP_ENABLE_SEQUENTIAL 二选一勾选,本人勾选了后者,否则会出现有些编译失败,影响INSTALL的执行

2、设置环境变量VTK_DEBUG_LEAKS_TRACE_CLASSES,将其值设置为想要打印调用堆栈的类名,多个的话以逗号隔开,例如vtkPolyData,vtkActor2D

3、在程序关闭后,会将有内存泄漏的对象及其创建的堆栈打印到控制台上。

注意事项:如果修改环境变量VTK_DEBUG_LEAKS_TRACE_CLASSES的值后,需要重启VS才能使其生效。

结果:VTK最后检测出内存泄漏的都是以下方式创建的对象

vtkSmartPointer<vtkCubeSource> testS = vtkCubeSource::New();

而通过智能指针的方式创建的对象则没有问题

vtkSmartPointer<vtkCubeSource> testS = vtkSmartPointer<vtkCubeSource>::New();

所以,其实通过代码的静态检查效率更高!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值