Oracle® Solaris Studio 12.4: Debugging a Program With dbx

Exit Print View

Updated: January 2015
 
 

Possible Leaks

Runtime checking can report a “possible” leak in two cases. The first case is when no pointers are found pointing to the beginning of the block but a pointer is found pointing to the interior of the block. This case is reported as an Address in block (aib) error. A stray pointer pointing into the block would be a real memory leak. However, some programs deliberately move the only pointer to an array back and forth as needed to access its entries. This case would not be a memory leak. Because runtime checking cannot distinguish between these two cases, it reports both of them as possible leaks, letting you determine which are real memory leaks.

The second type of possible leak occurs when no pointers to a block are found in the data space but a pointer is found in a register. This case is reported as an Address in register (air) error. If the register points to the block accidentally or if it is an old copy of a memory pointer that has since been lost, then this is a real leak. However, the compiler can optimize references and place the only pointer to a block in a register without ever writing the pointer to memory. Such a case would not be a real leak. Hence, if the program has been optimized and the report was the result of the showleaks command, it is likely not to be a real leak. In all other cases, it is likely to be a real leak. For more information, see showleaks Command.


Note -  Runtime leak checking requires the use of the standard libc malloc/free/realloc functions or allocators based on those functions. For other allocators, see Runtime Checking Application Programming Interface.