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.
boyutu N bayt olan arabellek 'tanımlayıcısı' taşacak; M baytları, L uzaklığında başlayarak yazılır
Açıklamalar
C4789 , belirli C çalışma zamanı (CRT) işlevleri kullanıldığında arabellek taşmalarıyla ilgili uyarır. Ayrıca, parametreler geçirildiğinde veya atamalar yapıldığında boyut uyuşmazlıklarını bildirebilir. Veri boyutları derleme zamanında biliniyorsa uyarı mümkündür. Bu uyarı, tipik veri boyutu uyuşmazlığı algılamayı atlatabilecek durumlara yöneliktir.
C4789 , verilerin derleme zamanında çok küçük olduğu bilinen bir veri bloğuna kopyalandığında uyarır.
Kopya şu CRT işlevlerinden birinin iç biçimini kullanırsa uyarı oluşur:
Uyarı, parametreyi daha büyük bir veri türüne dönüştürüp bir lvalue başvurusundan kopya ataması yaptığınızda da görünür.
Visual C++ hiçbir zaman yürütülmeyecek bir kod yolu için bu uyarıyı oluşturabilir. Bu örnekte gösterildiği gibi kullanarak #pragmauyarıyı geçici olarak devre dışı bırakabilirsiniz:
#pragma warning( push )
#pragma warning( disable : 4789 )
// unused code that generates compiler warning C4789
#pragma warning( pop )
Bu deyim, Visual C++'ın söz konusu kod bloğu için uyarı oluşturmasını engeller. , #pragma warning(push) mevcut durumu değiştirmeden önce #pragma warning(disable: 4789) korur. , #pragma warning(pop) gönderilen durumu geri yükler ve etkilerini #pragma warning(disable:4789)kaldırır. C++ önişlemci yönergesi #pragmahakkında daha fazla bilgi için bkz warning . ve Pragma yönergeleri ile __pragma ve _Pragma anahtar sözcükleri.
/sdl (Ek Güvenlik Denetimlerini Etkinleştir) derleyici seçeneği bu uyarıyı bir hataya yükseltir.
Örnekler
Aşağıdaki örnek C4789 oluşturur:
// C4789.cpp
// compile with: /Oi /W1 /c
#include <string.h>
#include <stdio.h>
int main()
{
char a[20];
strcpy(a, "0000000000000000000000000\n"); // C4789
char buf2[20];
memset(buf2, 'a', 21); // C4789
char c;
wchar_t w = 0;
memcpy(&c, &w, sizeof(wchar_t));
}
Aşağıdaki örnek ayrıca C4789 oluşturur:
// C4789b.cpp
// compile with: /W1 /O2 /c
// processor: x86
short G;
int main()
{
int * p = (int *)&G;
*p = 3; // C4789 - writes an int through a pointer to short
}