From: Greg C. <gch...@sb...> - 2012-03-22 19:15:49
|
On 2012-03-22 16:23Z, Herbig Gerhard (DP1) wrote: > Hi Greg, > > thanks for your hint regarding the order of the linker command. > That works! > > I try now exactely the way as recommended (and only using one line): > > gcc test1.c -o test1 -lmpatrol -lbfd -liberty -limagehlp -lintl > > The test1.c is the example from the repository: > > #include "mpatrol.h" > int main(void){ > char *p; > if (p = (char *) malloc(16)) free(p + 1); // offset 1 byte > return EXIT_SUCCESS; > } I tried that myself just now, and it worked as the mpatrol manual predicts: in 'mpatrol.log', I see: ERROR: [MISMAT]: free: 0x00D8FE61 does not match allocation of 0x00D8FE60 0x00D8FE60 (16 bytes) {malloc:20:0} [-|-|-] > There are no warnings or error messages and I get a test1.exe, which is about 5MByte. > So far all seems to be perfect. > > When I start test1.exe, the program runs endless without stop (and without crash). That seems strange for a three-line program with no loop that uses hardly any resources. Have you tried running it under 'gdb' and stepping through each line? > The (complete) content of the mpatrol.log is: > > ----------------------------------------------------- > mpatrol 1.5.1 (16 December 2008) > Copyright (C) 1997-2008 Graeme S. Roy [...] > read 14 symbols from VERSION.dll That's the introductory information that's written to 'mpatrol.log' at the beginning of the program. It sounds like the program is somehow not reaching the call to free(). That's odd, because 'mpatrol' provides its own version of free(), which should have detected the error and written something to the log. If you build the program without mpatrol: gcc test1.c -o test1 does the resulting test1.exe run to completion? > Is there something else, what I did wrong? > > To be completely sure to link against the right libraries, > I set the path explicitely to the installed mingw-installation, > where I also compiled mpatrol: > set path=C:\mingw\bin;c:\mingw\msys\1.0\bin > > and I also set: > set MPATROL_OPTIONS="LOGALL" (I also tried MPATROL_OPTIONS=LOGALL without apostrophes) I don't see anything wrong there. Do any of the other mpatrol examples work for you as expected? I'm using mpatrol 1.4.8 (08 January 2002) (which is a little old, but it has always worked for me), and gcc.exe (GCC) 3.4.5 (mingw-vista special r3) (which is a little old, but I need it for C++ exceptions). I built mpatrol from source myself with makefiles adapted from the mpatrol distribution--not the autotoolized version you used. |