Leak Detection in Visual Studio 2008/10
Neil Walker

Hello,
Just in case anyone hasn't seen it, I found this on the visual studio gallery yesterday:
http://visualstudiogallery.msdn.microsoft.com/7c40a5d8-dd35-4019-a2af-cb1403f5939c

and it works a treat, if anyone's interested. You just stick the include file at the top of your source code, ensure the path can find the library and it does the rest on running the program, outputting to the output and a file.

TeaRDoWN

Nice, I will give it a try. Thanks!

Trent Gamblin

Unfortunately (correct me if I'm wrong) these types of leak detectors only detect leaks in your own code, meaning if you do "bitmap = al_load_bitmap("huge.png"); exit(0);" it won't detect it. And for me that's where most of my leaks happen.

I've been playing around with MemoryValidator for a while now. I tried it a year or 2 ago and it was awesome except for lack of symbolicating mingw code. Now I can't seem to get it to symbolicate even MSVC code properly, which is a shame. It does find leaks that nothing else I've tried finds though, and through some telepathic thinking I was able to deduce where the main leaks were coming from without the symbols. If I could get this thing symbolicating my MinGW code, it would be work the $299. It detects memory errors as well as some other things too.

TeaRDoWN

Shame, however better than nothing I guess.

Previous project I made my own memory tracker that made sure that all allocations were deallocated. Had the wierdest crash/hang there and it was due to a malloc that never got free'd.

Arthur Kalliokoski

And for me that's where most of my leaks happen.

What OS doesn't release memory when a program exits? And it seems to me it'd only be the work of a couple hours to make a wrapper for new or malloc() that'd track memory allocations with a function to list current memory usage, which line of code allocated it, how long it was in existence and you could stick in an atexit() to do it upon exit(0).

[EDIT]

I wrote the above before Teardown edited the previous post, and no, I didn't check his revision history to deduce this :P.

Trent Gamblin

That was an example. I thought it was clear that I meant memory allocated by external libraries isn't tracked by these types of leak detectors (and there are a lot of them). And no, it's not difficult to write one like the one in the OP.

kenmasters1976

You just stick the include file at the top of your source code, ensure the path can find the library and it does the rest on running the program, outputting to the output and a file.

I use memwatch on gcc with MinGW. It works pretty much in the same way although, as Trent Gamblin said, it only detects leaks on your own code. It may not be very robust but it is more than enough for the projects I code and it's proven useful to me.

gnolam
TeaRDoWN

gnolam: Have used that one before, helped me in some places.

The two are fairly similar but the one in the first post seem to have a callstack showing you where in the code where each memory partition was allocated.

EDIT: Got this after installing the "VLD":
1>------ Build started: Project: ****, Configuration: Debug Win32 ------
1>Compiling...
1>****.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\wingdi.h(567) : error C2371: 'BITMAP' : redefinition; different basic types
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\allegro\gfx.h(262) : see declaration of 'BITMAP'
1>c:\program files\microsoft sdks\windows\v6.0a\include\wingdi.h(3994) : error C2229: struct 'tagDIBSECTION' has an illegal zero-sized array
1>Build log was saved at "file://c:****\Debug\BuildLog.htm"
1>**** - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Does it not work together with Allegro or is there a way to fix this? ::)

SiegeLord
TeaRDoWN said:

Does it not work together with Allegro or is there a way to fix this? ::)

allegro.cc comes with a nice search feature. This question has been asked and answered tens, if not hundreds of times before.

Edgar Reynaldo
#include <allegro.h>
#include <winalleg.h>
#include <other_windows_headers_here.h>

BITMAP* bmp = 0;

int main(int argc , char** argv) {return 0;}END_OF_MAIN()

Thread #606957. Printed from Allegro.cc