Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Hindari
malloc()danfree(), lebih sukanothrowversinewdengandelete(r.10)
Bendera peringatan ini menempatkan tempat malloc atau free dipanggil secara eksplisit sesuai dengan R.10: Hindari malloc dan free. Salah satu potensi perbaikan untuk peringatan tersebut adalah menggunakan std::make_unique untuk menghindari pembuatan dan penghancuran objek secara eksplisit. Jika perbaikan seperti itu tidak dapat diterima, operator baru dan hapus harus lebih disukai. Dalam beberapa kasus, jika pengecualian tidak diterima, malloc dan free dapat diganti dengan versi nothrow operator new dan delete.
Keterangan
Untuk mendeteksi
malloc(), kami memeriksa apakah panggilan memanggil fungsi global bernamamallocataustd::malloc. Fungsi harus mengembalikan penunjuk kevoiddan menerima satu parameter jenis integral yang tidak ditandatangani.Untuk mendeteksi
free(), kami memeriksa fungsi global bernamafreeataustd::freeyang tidak mengembalikan hasil dan menerima satu parameter, yang merupakan penunjuk kevoid.
Nama analisis kode: NO_MALLOC_FREE
Lihat juga
Contoh
#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);
}