Validasi parameter
Sebagian besar fungsi CRT yang ditingkatkan keamanan, dan banyak yang tidak, memvalidasi parameternya untuk hal-hal seperti memeriksa pointer untuk NULL
, bilangan bulat tersebut termasuk dalam rentang yang valid, atau nilai enumerasi tersebut valid. Jika parameter yang tidak valid ditemukan, handler parameter tidak valid dipanggil.
Rutinitas handler parameter tidak valid
Ketika fungsi Pustaka Runtime C mendeteksi parameter yang tidak valid, fungsi ini mengambil beberapa informasi tentang kesalahan, lalu memanggil makro yang membungkus fungsi pengiriman handler parameter yang tidak valid. Yang akan menjadi salah satu dari _invalid_parameter
, _invalid_parameter_noinfo
, atau _invalid_parameter_noinfo_noreturn
. Fungsi pengiriman mana yang disebut tergantung pada apakah kode Anda, masing-masing, build debug, build ritel, atau kesalahan tidak dianggap dapat dipulihkan.
Dalam build debug, makro parameter yang tidak valid biasanya menimbulkan pernyataan yang gagal dan titik henti debugger sebelum fungsi pengiriman dipanggil. Ketika kode berjalan, pernyataan dapat dilaporkan kepada pengguna dalam kotak dialog yang memiliki "Pembatalan", "Coba Lagi", dan "Lanjutkan" atau pilihan serupa yang bergantung pada sistem operasi dan versi CRT. Opsi ini memungkinkan pengguna untuk segera menghentikan program, melampirkan debugger, atau membiarkan kode yang ada terus berjalan yang memanggil fungsi pengiriman.
Fungsi pengiriman handler parameter yang tidak valid memanggil handler parameter yang saat ini ditetapkan tidak valid. Secara default, parameter yang tidak valid memanggil _invoke_watson
, yang menyebabkan aplikasi menutup dan menghasilkan cadangan mini. Jika diaktifkan oleh sistem operasi, kotak dialog akan meminta pengguna untuk mengirim crash dump ke Microsoft untuk dianalisis.
Anda dapat mengubah perilaku ini dengan menggunakan fungsi _set_invalid_parameter_handler
atau _set_thread_local_invalid_parameter_handler
untuk mengatur handler parameter yang tidak valid ke fungsi Anda sendiri. Jika fungsi yang Anda tentukan tidak mengakhiri aplikasi, kontrol dikembalikan ke fungsi yang menerima parameter yang tidak valid. Di CRT, fungsi-fungsi ini biasanya akan menghentikan eksekusi fungsi, diatur errno
ke kode kesalahan, dan mengembalikan kode kesalahan. Dalam banyak kasus, errno
nilai dan nilai yang dikembalikan adalah EINVAL
, untuk menunjukkan parameter yang tidak valid. Dalam beberapa kasus, kode kesalahan yang lebih spesifik dikembalikan, seperti EBADF
untuk penunjuk file yang buruk yang diteruskan sebagai parameter.
Untuk informasi selengkapnya tentang errno
, lihat errno
, , _sys_errlist
_doserrno
, dan _sys_nerr
.
Lihat juga
Fitur keamanan di CRT
File runtime C (CRT) dan C++ Standard Library (STL) .lib