博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Visual Leak Detector的配置与使用 (测试vector 引起的内存泄漏问题)
阅读量:4322 次
发布时间:2019-06-06

本文共 1057 字,大约阅读时间需要 3 分钟。

之前在做一个音频特征提取的批量处理程序,老是出现内存泄露问题,用Visual Leak Detector(VLD)工具做了下检测,检测出了一些问题,解决后还是会有问题。之后继续排查,因为我的代码中,大量的音频相关处理的数据都存成了vector变量,推测是不是vector变量的析构问题,上网查了些资料,现写出解决过程:

 

1、关于Visual Leak Detector的配置与使用

主要也是参考了其他的网上经验,主要过程是:

 

1. View | Other Window | Property Manager

 

2. Go to "VC++ Directories" settings

 

3. Set include folder path

 

4. Set lib folder path

 

点OK,我们就设置好了。

 

检验:

 

如下图,我们故意制造一个memory leak,然后debug + run,程序运行完毕后在Visual Studio 2010的Output窗口输出了内存泄露的信息:

PS:备忘一下,多项目的MFC解决方案,vld.h放到最底层的stdafx.h里面的最后就ok了~

另外,一定注意,是在程序彻底运行完毕,退出后,才会看到内存泄露问题的原因与具体位置提示信息。

最后发现,我的工程确实有一些问题被检测出来,但是更改后,运行大量数据处理时,还是会出现内存泄露导致崩溃,就把目光对准了大量数据存储成的Vector变量。

2、vector变量等的析构处理

不多说了,具体就是仅用clear()貌似是不能把被vector占用的空间给腾出来,具体解决方法,直接上代码:

 

[cpp]  
 
  1. <span style="font-size:18px;">vector<string> files;//文件夹下所有文件  
  2. files.clear();  
  3. vector<string>(files).swap(files);</span>  

看到有些文章说,string也会有同样的问题,在大量数据情况下,所以对string变量也做了些处理:

 

 

[cpp]  
 
  1. <span style="font-size:18px;">string word;  
  2. word.clear();  
  3. string(word).swap(word);</span>  

改完后,在4G内存的电脑上处理一万条音频的特征提取程序,就不会出现程序跑崩的问题了。

 

转载于:https://www.cnblogs.com/oneway1990/p/8434592.html

你可能感兴趣的文章
优秀博客
查看>>
词法分析程序
查看>>
Java反射
查看>>
[ACM_模拟][ACM_数学] LA 2995 Image Is Everything [由6个视图计算立方体最大体积]
查看>>
1040 有几个PAT
查看>>
BZOJ 1412 [ZJOI2009]狼和羊的故事 | 网络流
查看>>
原型模式
查看>>
Hadoop RPC源码阅读-交互协议
查看>>
WASAPI、DirectSound/DS、WaveOut、Kernel Streaming/KS
查看>>
Perl按行分割文件
查看>>
根据现有表操作基于active record的model
查看>>
NotMapped属性特性
查看>>
Count and Say
查看>>
GridView数据导入Excel/Excel数据读入GridView
查看>>
566. Reshape the Matrix
查看>>
python数据结构与算法之搜索
查看>>
(最小点覆盖) poj 2226
查看>>
(树形DP) poj 3659
查看>>
获取类的属性名和值
查看>>
python对json的操作总结
查看>>