Parametre doğrulama
Güvenliği iyileştirilmiş CRT işlevlerinin çoğu ve olmayanların çoğu, için işaretçileri denetleme gibi işlemler için NULL
parametrelerini, tamsayıların geçerli bir aralığa denk geldiğini veya numaralandırma değerlerinin geçerli olduğunu doğrulayın. Geçersiz bir parametre bulunursa, geçersiz parametre işleyicisi çağrılır.
Geçersiz parametre işleyici yordamı
C Çalışma Zamanı Kitaplığı işlevi geçersiz bir parametre algıladığında, hatayla ilgili bazı bilgileri yakalar ve ardından geçersiz parametre işleyicisi gönderme işlevini sarmalayan bir makroyu çağırır. Bu, , _invalid_parameter_noinfo
veya _invalid_parameter_noinfo_noreturn
olacaktır_invalid_parameter
. Hangi dağıtım işlevinin çağrıldığı, kodunuzun sırasıyla bir hata ayıklama derlemesi mi, perakende derleme mi yoksa hatanın kurtarılabilir olarak kabul edilmediğine bağlıdır.
Hata ayıklama derlemelerinde, geçersiz parametre makrosunda genellikle gönderme işlevi çağrılmadan önce başarısız bir onay ve hata ayıklayıcı kesme noktası oluşturulur. Kod çalıştırıldığında onay, kullanıcıya işletim sistemine ve CRT sürümüne bağlı "Abort", "Retry" ve "Continue" veya benzer seçenekler içeren bir iletişim kutusunda bildirilebilir. Bu seçenekler kullanıcının programı hemen sonlandırmasına, hata ayıklayıcı eklemesine veya mevcut kodun dispatch işlevini çağıran çalıştırmaya devam etmesine olanak tanır.
Geçersiz parametre işleyicisi gönderme işlevi, şu anda atanmış geçersiz parametre işleyicisini çağırır. Varsayılan olarak, geçersiz parametre uygulamasını çağırır _invoke_watson
ve bu da uygulamanın kapanmasına ve bir mini döküm oluşturmasına neden olur. İşletim sistemi tarafından etkinleştirilirse, bir iletişim kutusu kullanıcıya kilitlenme dökümünü analiz için Microsoft'a göndermek isteyip istemediğini sorar.
İşlevleri _set_invalid_parameter_handler
kullanarak veya _set_thread_local_invalid_parameter_handler
geçersiz parametre işleyicisini kendi işlevinize ayarlayarak bu davranışı değiştirebilirsiniz. Belirttiğiniz işlev uygulamayı sonlandırmazsa, geçersiz parametreleri alan işleve denetim döndürülür. CRT'de bu işlevler normalde işlev yürütmesini durdurur, hata koduna ayarlanır errno
ve bir hata kodu döndürür. Çoğu durumda, errno
geçersiz bir parametreyi belirtmek için hem değer hem de EINVAL
dönüş değeri şeklindedir. Bazı durumlarda, parametre olarak geçirilen hatalı bir dosya işaretçisi gibi EBADF
daha belirli bir hata kodu döndürülür.
hakkında errno
daha fazla bilgi için bkz.errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Ayrıca bkz.
CRT'deki güvenlik özellikleri
C çalışma zamanı (CRT) ve C++ Standart Kitaplığı (STL) .lib
dosyaları