我想使用LeakSanitizer来检测泄漏的内存,但是我使用的程序的样式在exit
之前没有释放内存。以我的经验,这是相当普遍的。
我想检测到此泄漏:
int main(int argc, char const *argv[])
{
char *p = malloc(5);
p = 0;
return 0;
}
并忽略此泄漏:
int main(int argc, char const *argv[])
{
char *p = malloc(5);
return 0;
}
答案 0 :(得分:3)
您希望LSan仅报告不可达的泄漏,即保证程序泄漏的指针。问题在于,默认情况下,LeakSanitizer会在程序结束时运行检查,通常是在全局C ++ dtor已完成并且不再认为其内容可访问之后。因此,当LSan最终运行时,必须假设不再有很多东西可用。要变通解决此问题,您可以添加
E
从main返回之前(受Issue 719和llvm discussion的启发)。
PS:请谨慎使用非常简单的示例,例如您上面发布的示例。即使在<c-v>jj$S"
,GCC也会经常删除未使用的分配和分配,因此请始终检查汇编程序是否符合您的期望。