Tracking Down Memory Leaks with _afxBreakAllocLast reviewed: July 31, 1997Article ID: Q122307 |
1.00 1.50 | 1.00 2.00
WINDOWS | WINDOWS NTkbprg kbtshoot The information in this article applies to:
SUMMARYThere is currently no documentation for the _afxBreakAlloc symbol defined by MFC. However it can be extremely useful in finding the cause of memory leaks in an application. This article explains how to use it. Note: In Visual C++ 32-bit Edition, version 4.0, the method described below is obsolete. For information on diagnosing memory leaks in this version of Visual C++, refer to the Visual C++ 4.0 Books Online topic "Diagnostics: Detecting Memory Leaks" in the "Programming with MFC: Encyclopedia."
MORE INFORMATIONThe Microsoft Foundation Classes have memory leak detection capabilities. When you execute a debug build of your application and you have used the AFX Trace Options Tool to Enable Tracing, MFC will report memory leaks when an object has been allocated (using operator new) but not deleted before the application exits. The default output in the debug window will look similar to this:
MDI16: Detected memory leaks! MDI16: Dumping objects -> MDI16: {6} str.cpp(82):non-object block at $24D76B72,5 bytes long MDI16: {5} non-object block at $24D76B4E, 6 bytes long MDI16: Object dump complete.The number found in the braces ({n}) indicates the allocation number that has occured. In the first object dump, it is obvious where the allocation occured. But the second object dump does not give the file and line number information, so it might be more difficult to track down the leak. However, MFC has the capability of breaking on a particular allocation number by using the _afxBreakAlloc symbol. The _afxBreakAlloc variable is not available programmatically because it is defined as a static variable in the MFC source code module AFXMEM.CPP. However it can be set/modified using the debugger. We can find the point in our code in which memory allocation number 5 occured by setting _afxBreakAlloc equal to 5 before we get to that point in the code. To do so, follow these steps:
|
Additional reference words: kbinf 1.00 1.50 2.00 2.10 2.50 3.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |