Bagikan melalui


_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

Mengatur fungsi yang akan dipanggil ketika CRT mendeteksi argumen yang tidak valid.

Sintaks

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

Parameter

pNew
Penunjuk fungsi ke handler parameter baru yang tidak valid.

Nilai hasil

Penunjuk ke handler parameter yang tidak valid sebelum panggilan.

Keterangan

Banyak fungsi runtime C memeriksa validitas argumen yang diteruskan kepada mereka. Jika argumen yang tidak valid diteruskan, fungsi dapat mengatur errno nomor kesalahan atau mengembalikan kode kesalahan. Dalam kasus seperti itu, handler parameter yang tidak valid juga dipanggil. Runtime C menyediakan handler parameter tidak valid global default yang mengakhiri program dan menampilkan pesan kesalahan runtime. Anda dapat menggunakan _set_invalid_parameter_handler untuk mengatur fungsi Anda sendiri sebagai handler parameter global yang tidak valid. Runtime C juga mendukung handler parameter tidak valid thread-local. Jika handler parameter thread-local diatur dalam utas dengan menggunakan _set_thread_local_invalid_parameter_handler, fungsi runtime C yang dipanggil dari utas gunakan handler tersebut alih-alih handler global. Hanya satu fungsi yang dapat ditentukan sebagai handler argumen global yang tidak valid pada satu waktu. Hanya satu fungsi yang dapat ditentukan sebagai handler argumen tidak valid thread-local per utas, tetapi utas yang berbeda dapat memiliki handler thread-local yang berbeda. Handler lokal utas memungkinkan Anda mengubah handler yang digunakan di salah satu bagian kode Anda tanpa memengaruhi perilaku utas lain.

Ketika runtime memanggil fungsi parameter yang tidak valid, biasanya berarti bahwa terjadi kesalahan yang tidak dapat dipulihkan. Fungsi handler parameter yang tidak valid yang Anda berikan harus menyimpan data apa pun yang dapat dilakukannya lalu membatalkan. Ini seharusnya tidak mengembalikan kontrol ke fungsi utama kecuali Anda yakin bahwa kesalahan dapat dipulihkan.

Fungsi handler parameter yang tidak valid harus memiliki prototipe berikut:

void _invalid_parameter(
   const wchar_t * expression,
   const wchar_t * function,
   const wchar_t * file,
   unsigned int line,
   uintptr_t pReserved
);

Argumen expression adalah representasi string lebar dari ekspresi argumen yang memunculkan kesalahan. Argumen function adalah nama fungsi CRT yang menerima argumen yang tidak valid. Argumen file adalah nama file sumber CRT yang berisi fungsi . Argumen line adalah nomor baris dalam file tersebut. Argumen terakhir dicadangkan. Semua parameter memiliki nilai NULL kecuali versi debug pustaka CRT digunakan.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler C: <stdlib.h>

C++: <cstdlib> atau <stdlib.h>

Fungsi _set_invalid_parameter_handler dan _set_thread_local_invalid_parameter_handler khusus Microsoft. Untuk informasi kompatibilitas, lihat Kompatibilitas.

Contoh

Dalam contoh berikut, handler kesalahan parameter yang tidak valid digunakan untuk mencetak fungsi yang menerima parameter yang tidak valid dan file dan baris di sumber CRT. Ketika pustaka CRT debug digunakan, kesalahan parameter yang tidak valid juga menimbulkan pernyataan, yang dinonaktifkan dalam contoh ini menggunakan _CrtSetReportMode.

// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>  // For _CrtSetReportMode

void myInvalidParameterHandler(const wchar_t* expression,
   const wchar_t* function,
   const wchar_t* file,
   unsigned int line,
   uintptr_t pReserved)
{
   wprintf(L"Invalid parameter detected in function %s."
            L" File: %s Line: %d\n", function, file, line);
   wprintf(L"Expression: %s\n", expression);
   abort();
}

int main( )
{
   char* formatString;

   _invalid_parameter_handler oldHandler, newHandler;
   newHandler = myInvalidParameterHandler;
   oldHandler = _set_invalid_parameter_handler(newHandler);

   // Disable the message box for assertions.
   _CrtSetReportMode(_CRT_ASSERT, 0);

   // Call printf_s with invalid parameters.

   formatString = NULL;
   printf(formatString);
}
Invalid parameter detected in function common_vfprintf. File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 32
Expression: format != nullptr

Lihat juga

_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
Versi fungsi CRT yang ditingkatkan keamanan
errno, _doserrno, _sys_errlist, dan _sys_nerr