Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'dizi-adı' ifadesi: İşaretçi bozulmasına yönelik dizi yok (sınır.3).
Açıklamalar
C26481 gibi, bu denetim de C++ Çekirdek Yönergeleri kuralı I.13: Bir diziyi tek bir işaretçi olarak geçirmeme kuralını zorunlu kılmaya yardımcı olur. Kural, statik dizi türü bilgilerinin bozulmadan ham işaretçiye kaybolduğu yerleri algılar.
zstring ve czstring türleri hariç tutulmaz.
C26481 ve C26485, Sınır Güvenliği Profili kurallarından gelir. Bu kurallar C++ Çekirdek Kılavuz Denetleyicisi'nin ilk sürümünde uygulandı. Ham işaretçilerin güvenli olmamasını önlemeye yardımcı olduklarından ham işaretçiler kategorisi için geçerlidir.
Örnek
Bu örnek, çağrısında işaretçi bozulmasına yönelik dizi için iki uyarıya neden olur memcpy.
// c26485_bad.cpp
// compile using:
// set Esp.Extensions=CppCoreCheck.dll
// cl /W4 /EHsc /permissive- /analyze /analyze:plugin EspXEngine.dll /analyze:ruleset "%VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckBoundsRules.ruleset" c26485_bad.cpp
#include <cstring>
constexpr int array_length = 10;
int main() noexcept
{
int const from_array[array_length] = { 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 };
int to_array[array_length] = {};
if (nullptr != memcpy(to_array, from_array, sizeof(int) * array_length))
return 0;
return 1;
}
Bu sorunu gidermek için, işaretçi parametrelerini alan ancak sınır bilgilerini yönetmeyen çağrılardan kaçının. Bu tür işlevlerin kullanımı genellikle hataya açıktır. C++ standart kitaplık çağrılarını C çalışma zamanı kitaplığı işlevlerine tercih edin. veya gsl::span işlevlerini kendi işlevlerinizde kullanmayı std::vector göz önünde bulundurun. Çürümüş işaretçi türüne açık bir atama uyarıyı engeller, ancak buggy kodunu engellemez.