Josh-TotalView-Tech
07-17-2006, 11:13 AM
If you enable memory debugging, TotalView automatically displays information in the Variable Window about the variable's memory use. The following small program allocates a memory block, sets a pointer to the middle of the block, and then deallocates the block:
1 main(int argc, char **argv)
2 {
3 int *addr = 0; /* Pointer to start of block. */
4 int *misaddr = 0; /* Pointer to interior of block. */
5
6 addr = (int *) malloc (10 * sizeof(int));
7
8 misaddr = addr + 5; /* Point to block interior */
9
10 /* Deallocate the block. addr and */
11 /* misaddr are now dangling. */
12 free (addr);
13 }
[/QUOTE]
The following figure shows two Variable Windows. Execution was stopped before the free() function on line 12 executes. Both windows contain a memory indicator saying that blocks are allocated.
http://www.etnus.com/Support/Tips/images/70Variables_allocated.png
After the free() function on line 12 executes, the messages change:
http://www.etnus.com/Support/Tips/images/70Variables_deallocated.png
1 main(int argc, char **argv)
2 {
3 int *addr = 0; /* Pointer to start of block. */
4 int *misaddr = 0; /* Pointer to interior of block. */
5
6 addr = (int *) malloc (10 * sizeof(int));
7
8 misaddr = addr + 5; /* Point to block interior */
9
10 /* Deallocate the block. addr and */
11 /* misaddr are now dangling. */
12 free (addr);
13 }
[/QUOTE]
The following figure shows two Variable Windows. Execution was stopped before the free() function on line 12 executes. Both windows contain a memory indicator saying that blocks are allocated.
http://www.etnus.com/Support/Tips/images/70Variables_allocated.png
After the free() function on line 12 executes, the messages change:
http://www.etnus.com/Support/Tips/images/70Variables_deallocated.png