Oracle Solaris Studio 12.2:使用 dbx 调试程序

可能的泄漏

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

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


注 –

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