Ank*_*kur 11 c c++ memory memory-leaks
我可以使用哪些提示来避免应用程序中的内存泄漏?在我当前的项目中,我使用了一个工具"INSURE ++"来查找内存泄漏并生成报告.
除了该工具之外,还有任何方法可以识别内存泄漏并克服它.
fma*_*ark 10
这有三种主要方式.
首先是不首先创建内存泄漏.防御性编程技术在这里非常宝贵.有关此问题的摘要或安全C编码的相关章节,请参阅此优秀演示文稿.我对C语言比C++更熟悉,但我知道C++的智能指针在这里很有用.
第二种方法静态分析,它试图检测源代码中的错误.这个类别中的原始工具是lint,现在已经过时了.据我所知,最好的工具是商业性的,例如coverty.但是,确实存在一些免费工具.
第三种方法是在运行时检测内存泄漏,就像INSURE ++那样. Valgrind非常出色,值得推荐.它可能有助于捕获您已经介绍过的错误.如果您拥有一个具有良好代码覆盖率的测试套件,这将特别有用.
对于C,一个好的代码组织会有所帮助.即不要在代码库中调用malloc()和free().将它们集中到两个函数中,然后您有一个单点用于所有检查.最简单的可能是计算成功的呼叫并在程序退出时检查它们是否平衡.
static unsigned long mymem_count_alloc = 0;
static unsigned long mymem_count_free = 0;
void *mymem_alloc (size_t size)
{
void *p;
p = malloc(size);
if (p)
{
mymem_count_alloc++;
}
else
error logging/handling/signaling
return (p);
}
void mymem_free (void *p)
{
if (p)
{
free(p);
mymem_count_free++;
}
}
void mymem_check (void)
{
if (mymem_count_alloc != mymem_count_free)
error alert
}
Run Code Online (Sandbox Code Playgroud)
您可以继续使用不同的数据结构.无论您需要为字符串分配内存,请使用mystr_alloc和mystr_free.等等.当以这种方式检测到泄漏时,您可以快速缩小范围.
| 归档时间: |
|
| 查看次数: |
24724 次 |
| 最近记录: |