Конфигурация cppcheck для проверки освобождения памяти, которая не принадлежит - PullRequest
0 голосов
/ 07 января 2019

Можно ли настроить cppcheck для перехвата следующего условия в коде C:

void test1() {
    char *strp = "my string";
    flist *flistp = create_flist();
    flist_put(flistp, strp);
    destroy_flist(flistp);
}

То, что делает flist_put, принимает strp и передает владение памятью flistp (destroy_flist позже позаботится об освобождении этой памяти). В приведенном выше коде проблема заключается в том, что flist_put может использоваться , а не , поскольку память принадлежит области действия test1 (). Вместо этого необходимо использовать flist_set, который вместо этого создает копию strp.

Примечания - все перечисленные ниже функции с закрытым исходным кодом:

  • create_flist выделяет память для структуры flist
  • destroy_flist освобождает память структуры flist
  • flist_put передает владение памятью, на которую указывает указатель, в структуру flist
  • flist_set создает копию переданного значения и добавляет его к flist, выделяя для него память (которой владеет flist)
...