Uyarı C26408
ve
free()
'den kaçınınmalloc()
, iledelete
sürümününew
(r.10) tercih edinnothrow
Bu uyarı, R.10' a göre açıkça veya free
çağrıldığı malloc
yerleri işaretler: Avoid malloc
ve free
. Bu tür uyarılar için olası düzeltmelerden biri, nesnelerin açıkça oluşturulmasını ve yok edilmesini önlemek için std::make_unique kullanmaktır. Böyle bir düzeltme kabul edilebilir değilse, yeni işleç ve silme tercih edilmelidir. Bazı durumlarda, özel durumlar hoş karşılanmazsa malloc
ve free
işleçlerin new
nothrow sürümüyle değiştirilebilir.delete
Açıklamalar
algılamak
malloc()
için, bir çağrının veyastd::malloc
adlımalloc
bir genel işlevi çağırarak çağırmadığını denetleriz. İşlev bir işaretçivoid
döndürmelidir ve işaretsiz tamsayı türünde bir parametre kabul etmelidir.algılamak
free()
için, adlıfree
veyastd::free
hiçbir sonuç döndürmeyen genel işlevleri denetleriz ve bir parametre kabul ederiz; bu da işaretçidirvoid
.
Kod analizi adı: NO_MALLOC_FREE
Ayrıca bkz.
Örnek
#include <new>
struct myStruct {};
void function_malloc_free() {
myStruct* ms = static_cast<myStruct*>(malloc(sizeof(myStruct))); // C26408
free(ms); // C26408
}
void function_nothrow_new_delete() {
myStruct* ms = new(std::nothrow) myStruct;
operator delete (ms, std::nothrow);
}