[Qt-interest] Question about detecting memory leaks!

Marcelo Magno T. Sales mmtsales at gmail.com
Wed Dec 15 18:42:07 CET 2010


You have allocated memory for an int with new, but did not freed it with 
delete before terminating your program.  A leak is to be expected.
Your assumption about all instances of classes derived from QObject 
being deleted automatically is also faulty.
QObjects are deleted automatically only if their parents are destroyed. 
If you create the parent in heap and do not delete it manually, you will 
have leaks also. If you create the parent in the stack, then it will be 
destroyed when it runs out of scope and will automatically delete all of 
its children, which will then delete their children and so on. In this 
case there will be no leaks.

[]'s
Marcelo

Em quarta-feira 15 dezembro 2010, Jack Mack escreveu:
> Hi all,
> 
> I have a question about detecting memory leaks in my qt based
> application.
> 
> I'm using Qt 4.7.0 with VS2008.
> 
> Maybe this is a simple question and I get a fast answer.
> This is my snipped out code of my qt based application:
> 
>     int* a = new int;
>     *a = 1;
> 
> When I start the app in debug-mode within VS2008 and finish the app
> correctly by clicking the windows system menu then the output window
> of VS2008 shows only some text like:
> 
> ...
> Thread 'Win32 Thread' (0xf68) finished with code 0 (0x0).
> BTMMHOOK 15.12.2010 12:19:31 Thread<0460> Hook DLL unloaded
> Thread 'Win32 Thread' (0x132c) finished with code 0 (0x0).
> Program "[4052] LineView.exe: Systemown" finished with code 0 (0x0).
> 
> When I use the snipped code above in a simple MFC application and run
> it in debug-mode and close it then the following text is showed by
> output window of VS2008:
> 
> ...
> BTMMHOOK 15.12.2010 12:21:16 Thread<0E14> Hook DLL unloaded
> Detected memory leaks!
> Dumping objects ->
> e:\entwicklung\simplemfc\simplemfc\simplemfc.cpp(77) : {565} normal
> block at 0x0034B790, 4 bytes long. Data: <    > 01 00 00 00
> Object dump complete.
> Program "[2160] SimpleMFC.exe: Systemown" finished with code 0 (0x0).
> 
> I think that's strange! The compiler warning options are the same.
> Yes, I know that all classed inherited by QObject are deleted
> automatically and "delete" is not neccessary. But the snipped code
> above causes definitly a memory leak.
> 
> Can someone explain that to me?
> 
> Thanks a lot,
> jack



More information about the Qt-interest-old mailing list