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

退出打印视图

更新时间: 2015 年 1 月
 
 

内存泄漏错误

启用了泄漏检查时,运行时检查会报告下列类型的错误。

地址位于块内 (aib) 错误

问题: 可能的内存泄漏。没有对已分配块开始处的引用,但至少有一个对块内地址的引用。

可能的原因: 指向块开始处的唯一指针增加。

示例:

char *ptr;
main()
{
   ptr = (char *)malloc(4);
   ptr++;    /* Address in Block */
}

地址位于寄存器内 (air) 错误

问题: 可能的内存泄漏。尚未释放已分配块,程序内存中不存在对块的引用,但寄存器中存在引用。

可能的原因:如果编译器只将程序变量保留在寄存器中,而不保留在内存中,自然会出现这种情况。编译器常常会在启用了优化功能的情况下这样处理局部变量和函数参数。如果在未启用优化功能的情况下出现这种错误,则可能是真正的内存泄漏。如果指向已分配块的唯一指针在块被释放前超出作用域,便会出现这种情况。

示例:

if (i == 0) {
       char *ptr = (char *)malloc(4);
       /* ptr is going out of scope */
}
  /* Memory Leak or Address in Register */

内存泄漏 (mel) 错误

问题:尚未释放已分配块,程序中不存在对块的引用。

可能的原因: 程序未能释放不再使用的块。

示例:

char *ptr;

    ptr = (char *)malloc(1);
    ptr = 0;
/* Memory leak (mel) */