У меня проблема при запуске clang в службе Android для какого-либо файла cpp.
Я создаю преднамеренную утечку памяти, вызывая экземпляр объекта из
другой класс, не удаляя его, чтобы увидеть, создает ли clang предупреждение об утечке памяти
или нет, но в некоторых случаях это не создает предупреждение утечки памяти.
1 - Если я поместил объявление класса в тот же заголовочный файл с классом, для которого я хотел создать утечку памяти, clang перехватит утечку памяти следующим образом:
Example.h
class Ad
{
public:
void xx();
};
class Example
{
public:
bool getData();
};
Example.cpp
#include "Example.h"
void Ad::xx()
{
bool ar = false;
ar = true;
}
bool Example::getData()
{
char *ptrt;
ptrt = (char*)malloc(10*sizeof(char));
snprintf(ptrt,10,"%s","trial");
Ad *arr = new Ad();
arr->xx();
return true;
}
В этом примере clang может отловить 2 утечки памяти в функции getData ().
2-Если я создаю объявление класса Ad в отдельном заголовочном файле, то clang не может обнаружить утечку памяти:
Ad.h
class Ad
{
public:
void xx();
};
Ad.cpp
#include "Ad.h"
void Ad::xx()
{
bool ar = false;
ar = true;
}
Example.h
class Example
{
public:
bool getData();
};
Example.cpp
#include "Example.h"
#include "Ad.h"
bool Example::getData()
{
Ad *arr = new Ad();
arr->xx();
//Clang can not catch memory leak error here..
return true;
}
Notes:
I am exporting WITH_STATIC_ANALYZER=1 on aosp android/ folder
and running mmma module_name/ .
I am using Android P for aosp.
I also initialized this flags in Android.bp
cflags:[
"-Wall",
"-Werror",
"-Wunused",
"-Wunreachable-code",
],
Есть ли идеи, почему это может произойти?