Click here to Skip to main content
12,813,906 members (30,502 online)
Click here to Skip to main content
Add your own
alternative version


51 bookmarked
Posted 10 Sep 2003

GDI+ and MFC memory leak detection

, 10 Sep 2003
Rate this:
Please Sign up or sign in to vote.
GDI+ and MFC memory leak detection


When I started to use GDI+ with MFC in VC++ 6.0 I ran into some annoying problems:

  1. Couldn't compile my GDI+ code with MFC without removing the DEBUG_NEW macros
  2. Couldn't compile GDI+ code with STL without tweaking my code
  3. Couldn't detect memory leaks

Here is the solution!

How to use

Include GdiplusH.h in stdafx.h:

<PRE lang=c++>// GDI+ helper file #include "GdiplusH.h"


  • GDI+ will be initialized when program starts
  • You can use _CrtXXX functions to detect memory leaks, set an allocation breakpoint, save and compare memory states, etc.
  • Memory leak information will be dumped to output window (MSVC IDE)
  • No more compilation problem with DEBUG_NEW
  • No more compilation problem with STL

Memory leak detection


GDI+ is using GdipAlloc and GdipFree for allocating memory for GDI+ objects. Probably they have their own memory allocation lists in gdiplus.dll, but unfortunately there is no exported API to get any memory leak information. But GDI+ objects can be located on stack (for example: creating a local variable in a function), so there is no special initialization for these memory regions, so we do not have to use GdipAlloc or GdipFree. If we call the CRT debug version of memory allocation and deletion functions instead of GdipAlloc/Free, we can detect memory leaks very easily using the well known _CrtXXX functions.


Miscellaneous defines


  • GDIPLUS_NO_AUTO_INIT - GDI+ won't be initialized at program startup. You have to create a GdiPlus::GdiPlusInitialize variable to initialize GDI+ (GDI+ will be uninitialized, when destructor is called for this variable).
  •  GDIPLUS_USE_GDIPLUS_MEM - GdipAlloc and GdipFree is used for memory operations. In this case _Crt functions cannot be used to detect memory leaks
  •  GDIPLUS_NO_AUTO_NAMESPACE - Gdiplus namespace won't be defined as a used namespace. In this case you have to use Gdiplus:: prefix.



This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Zoltan Csizmadia
Web Developer
United States United States
No Biography provided

You may also be interested in...


Comments and Discussions

QuestionTool for searh memory and GDI leaks. Pin
Mast Avalons10-Jan-12 9:02
memberMast Avalons10-Jan-12 9:02 
AnswerRe: Tool for searh memory and GDI leaks. Pin
SuperMegaCoder30-Mar-12 11:38
memberSuperMegaCoder30-Mar-12 11:38 
GeneralRe: Tool for searh memory and GDI leaks. Pin
JohnDepth6-Jun-12 19:08
memberJohnDepth6-Jun-12 19:08 
GeneralRe: Tool for searh memory and GDI leaks. Pin
Mast Avalons7-Jun-12 12:18
memberMast Avalons7-Jun-12 12:18 
GeneralAnother solution (risky) Pin
Stanislas14-Jul-10 1:53
memberStanislas14-Jul-10 1:53 
GeneralThanks alot! Pin
Lars [Large] Werner27-Aug-08 21:03
memberLars [Large] Werner27-Aug-08 21:03 
GeneralA problem Pin
qqz25-Jan-08 6:33
memberqqz25-Jan-08 6:33 
GeneralThak you! Pin
skitten9-Mar-07 12:00
memberskitten9-Mar-07 12:00 
GeneralGood Pin
leibe15-Sep-05 17:34
memberleibe15-Sep-05 17:34 
I had the same problem like you.
First time, I redefined the DEBUG_NEW as new at debug mode. But I couldn't debug properly.
You guys also can reference here(;en-us;317799[^])
I got a resolution from that site(MS). It looks like similar code with this article. Try Q317799 also if you like.
GeneralLink errors in release mode Pin
Salvador Dali20-Apr-04 23:58
memberSalvador Dali20-Apr-04 23:58 
GeneralUse __declspec(selectany) Pin
Stanislas14-Jul-10 6:32
memberStanislas14-Jul-10 6:32 
GeneralUseful stuff Pin
Nishant S17-Sep-03 21:51
editorNishant S17-Sep-03 21:51 
GeneralGood Job! Pin
Normski11-Sep-03 21:47
memberNormski11-Sep-03 21:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170308.1 | Last Updated 11 Sep 2003
Article Copyright 2003 by Zoltan Csizmadia
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid