This example illustrates how the mpatrol library checks for calls to incompatible pairs of memory allocation functions. It requires the use of C++, although does not use any C++ features except for overloaded operators. The source is in tests/fail/test7.c, and tests/fail/test8.c is similar.
23 /*
24 * Allocates a block of 16 bytes using C++ operator new[] and then
25 * attempts to free it using C++ operator delete.
26 */
29 #include "mpatrol.h"
32 int main(void)
33 {
34 char *p;
36 p = new char[16];
37 delete p;
38 return EXIT_SUCCESS;
39 }
The relevant parts of mpatrol.log are shown below.
ALLOC: operator new[] (74, 16 bytes, 4 bytes) [int main()|test7.c|36]
0x0804955D main+13
0x400DB9CB __libc_start_main+255
0x080494C1 _start+33
returns 0x08062FC0
FREE: operator delete (0x08062FC0) [int main()|test7.c|37]
0x0804956E main+30
0x400DB9CB __libc_start_main+255
0x080494C1 _start+33
ERROR: [INCOMP]: operator delete: 0x08062FC0 was allocated with operator new[]
0x08062FC0 (16 bytes) {operator new[]:74:0} [int main()|test7.c|36]
0x0804955D main+13
0x400DB9CB __libc_start_main+255
0x080494C1 _start+33
This shows a call to operator new[], closely followed by a call to
operator delete. However, in C++ calls to operator new[] must be
matched by calls to operator delete[] and not operator delete.
Hence, the library reports this as an error and does not free the memory
allocation.