Valgrind - exact leak location.

Neil Ferguson nferguso@eso.org
Thu Oct 26 11:57:00 GMT 2006


Not a GCC question, but I'll have a pot at it anyway.

For future reference, the right place to ask this sort of question is the 
valgrind-users mailing list - see here:

http://www.valgrind.org/support/mailing_lists.html

>  > ==9984==    by 0x1B97AB4E: ABCParser::parseString()
>  > (stl_vector.h:501)
>  > ==9984==    by 0x1B975D34: ABCParser::execute()
>  > (ABCParser.cpp:101)
>  > ==9984==    by 0x80499A9: main (testAlgo.cpp:31)
>  > ==9984==  Address 0x7 is not stack'd, malloc'd or
>  > (recently) free'd
>  > ----------------------------------------------------
>  > 
>  > the rogue operation is being performed inside
>  > ABCParser::parseString()  however this is a very big
>  > function and I am unable to painstakingly go thru it
>  > to find out the possible source of leak.
>  > 
>  > Is there a way out? Can valgrind give me the exact
>  > line number in a file where the "invalid read"
>  > occured?

Valgrind *has* given you the line number, but the error happens to show up 
inside a piece of inlined code from stl_vector.h. There are two ways to handle 
this:

1. Get Valgrind to start a debugger for you when the error happens - run 
'valgrind --help', then look for the '--db-attach' & '--db-command' options.

2. The fact that this happens in inlined vector code means that your method 
must have been performing a vector operation at the time. You may find that 
narrows things down enough to skim ABCParser::parseString() more quickly. If 
you look at the area around line 501 in stl_vector.h, you may be able to find 
out which vector operation was being called, narrowing things down still further.

Hope that helps!

Neil.



More information about the Gcc-help mailing list