Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ve
malloc()'den kaçınınfree(), ilenothrowsürümününew(r.10) tercih edindelete
Bu uyarı, R.10' a göre açıkça veya malloc çağrıldığı free 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 veyamallocadlıstd::mallocbir genel işlevi çağırarak çağırmadığını denetleriz. İşlev bir işaretçivoiddöndürmelidir ve işaretsiz tamsayı türünde bir parametre kabul etmelidir.algılamak
free()için, adlıfreeveyastd::freehiç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);
}