Aracılığıyla paylaş


Uyarı C26408

ve free()'den kaçınınmalloc(), ile delete sürümünü new (r.10) tercih edin nothrow

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 veya std::mallocadlı malloc bir genel işlevi çağırarak çağırmadığını denetleriz. İşlev bir işaretçi void döndürmelidir ve işaretsiz tamsayı türünde bir parametre kabul etmelidir.

  • algılamak free()için, adlı free veya std::free hiçbir sonuç döndürmeyen genel işlevleri denetleriz ve bir parametre kabul ederiz; bu da işaretçidir void.

Kod analizi adı: NO_MALLOC_FREE

Ayrıca bkz.

C++ Çekirdek Yönergeleri R.10

Ö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);
}