English 中文(简体)
避免在C/C++中出现记忆衰变的方法
原标题:Ways to avoid Memory Leaks in C/C++

我能用什么来避免我的申请中的记忆泄露? 在我目前的项目中,我使用“INSURE++”工具,发现记忆泄露并生成报告。

除了这一工具外,还有查明记忆泄漏和克服这种泄漏的任何方法。

问题回答

这样做有三个主要途径。

首先是 不要造成记忆泄漏<>。 在这方面,防御性的方案拟订技术是宝贵的。 See this excellent presentation , for a summary of this issues, or the relevant chapter in smart Pointers在此是有用的。

第二种方法统计分析,试图发现你的源代码中的错误。 这一类别的原始工具是lint,目前不幸已经过时。 我知道,最佳工具是商业工具,例如coverty。 然而,有些。 免费工具确实存在

第三项办法是在运行时间发现记忆泄露,例如INSURE++>,Valgrind在此是极好的,建议很高。 它可以帮助追捕已经引入的ve。 如果你确实有一个精通法典的测试套,那将特别有益。

对C而言,一个良好的编码组织帮助了。 I.e. 不要向你们的密码库发出免费电话。 将它们集中为两个职能,然后,所有检查都有一个单一点。 最简单的办法可以是计算成功的电话,并在方案退出时核对这些电话是平衡的。

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
}

你们可以为不同的数据结构继续这样做。 每当你们需要为扼杀而献计献计献计献计献计献计献计献计献计献计献计献计献策。 因此。 当发现泄漏时,你可以迅速缩小。

聪明点人可以非常有助于将物体寿命的簿记自动化:

rel=“nofollow noreferer” http://ootips.org/yonat/4dev/smart-pointers.html

在可能的情况下,在相关范围内使用分配的物体,而不是使用新的/替代物。

瓦尔格里德等工具有一些间接费用,可以减缓其运行速度。 如果你知道你的代码基数和经常出现的泄漏类型,你可以针对特定类别,进行轻重检查(即使只是你在离职时核对零的简单目标)。 然后,这些轻度检查可以用来激励你在启动时进行更为广泛的脱硫会议。

难道我们谈论的是找到泄漏的工具,还是制定避免泄漏的方法?

就前者而言,如果你有这方面的许可,则上述对IBM工具的阀门或合理套。 Dr. Dobbs recommended CompuWare's Bounds 支票,但2002年。

嗣后,见:

C++ 避免记忆泄漏的责任:

http://www.cprogramming.com/tutorial/memory_debugging_parallel_inspector.html

http://scottmcpeak.com/memory-errors/"rel=“nofollow noreferer”>http://scottmcpeak.com/memory-errors/

http://www.yolinux.com/TUTORIALS/C++MemoryAndMemoryLeaks.html

使用智能标识,例如<代码>std: 共享_ptr<t> (C++0x),std:tr1:共享_ptr<t> (TR1),或boost:commd_ptr<t>。 当然,这一解决办法只与C++合作——你自己在C中重新工作。

避免或发现? 避免、首先发现和试图理解...... 另一种方式是使用GC图书馆,例如,但其他(也许更好)图书馆可能存在。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?