Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

可能的泄漏

运行时检查可以在两种情况下报告“可能的”泄漏。第一种情况是任何指针均未指向块的开头处,但有一个指针指向块的内部。这种情况将报告为 "Address in block" 地址位于块内 (aib) 错误。指向该块的迷失指针是真正的内存泄漏。但是,某些程序会根据需要有意反复移动指向数组的唯一指针来访问其条目。这类情况不是内存泄漏。由于运行时检查无法区分这两种情况,因此会将这两种情况都按可能的泄漏来报告,由您来确定哪一种情况是真正的内存泄漏。

当数据空间中没有找到指向块的指针,但在寄存器中找到指针时,将发生第二种可能的泄漏。这种情况按“地址位于寄存器内 (air)”错误来报告。如果寄存器意外指向内存块或寄存器是后来丢失了的内存指针的旧副本,便是真正的泄漏。不过,编译器可以优化引用以及将指向内存块的唯一指针放入寄存器中,而不必将指针写入内存。这类情况便不是真正的泄漏。因此,如果程序已优化且报告是 showleaks 命令的结果,则这类情况很可能不是真正的泄漏。 所有其他情况便可能是真正的泄漏。有关更多信息,请参见showleaks 命令


注 -  运行时泄漏检查要求使用标准 libc malloc/free/realloc 函数或基于这些函数的分配器。有关其他分配器,请参见运行时检查应用编程接口