Можно ли настроить 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)