Debugging Dynamic Memory Usage Errors Using HP WDB v6.3 (5900-2181, August 2012)
Example 22 Detecting memory leaks that are caused when an application overwrites a pointer that
currently addresses a block of memory with another address or data
Sample Program
$ cat memleak1.c
1 #include<stdio.h>
2
3 int main() {
4
5 printf("Starting program\n");
6 int* han1 = (int*)malloc(sizeof(int));
7 int* han2 = (int*)malloc(sizeof(int));
8 han1 = han2;
9 free(han1);
10 }
Sample Debugging Session
(gdb) set heap-check on
(gdb) file memleak1
Reading symbols from memleak1...done.
(gdb) b main
Breakpoint 1 at 0x2bdc: file memleak1.c, line 5 from memleak1.
(gdb) r
Starting program: memleak1
Breakpoint 1, main () at memleak1.c:5
5 printf("Starting program\n");
(gdb) n
Starting program
6 int* han1 = (int*)malloc(sizeof(int));
(gdb)
7 int* han2 = (int*)malloc(sizeof(int));
(gdb)
8 han1 = han2;
(gdb)
9 free(han1);
(gdb)
10 }
(gdb) info leak
Scanning for memory leaks...
4 bytes leaked in 1 blocks
No. Total bytes Blocks Address Function
0 4 1 0x4042c3e0 main()
(gdb) info leak 0
4 bytes leaked at 0x4042c3e0 (100.00% of all bytes leaked)
#0 main() at memleak1.c:6
#1 _start() from /usr/lib/libc.2
#2 _start() from /opt/langtools/lib/librtc.sl
#3 $START$() from
Additional Examples 79