Я изо всех сил пытаюсь разрешить ложное срабатывание leaked_storage. В этом примере
struct string
{
size_t len;
data [1];
};
const char *string_new(const char *s, size_t n)
{
struct string *st;
st = malloc(offsetof(struct string, data) + n + 1);
st->len = n;
memcpy(st->data, s, len);
st->data[len] = 0;
return st->data;
}
void string_free(const char *s)
{
struct string *st = (struct string *)(s - offsetof(struct string, data));
free(st);
}
Coverity Scan сообщит об утечке ресурсов
(RESOURCE_LEAK) 5. leaked_storage: переменная st, выходящая за пределы области видимости, приводит к утечке хранилища, на которое она указывает.
В этом примере это прямое указание на то, что утечки нет. Что я могу сделать, чтобы заглушить ложные срабатывания?
Обновление от 7 мая 2020 г.
Моделирование - неправильная техника. Coverity Scan разрешает аннотации для решения этой конкретной c ситуации. В нашем случае
const char *string_new(const char *s, size_t n)
{
struct string *st;
st = malloc(offsetof(struct string, data) + n + 1);
st->len = n;
memcpy(st->data, s, len);
st->data[len] = 0;
/* coverity[leaked_storage] */
return st->data;
}
отключит ложное срабатывание предупреждения.
Всем спасибо.