Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
az N bájt méretű puffer "azonosítója" túl lesz futva; M bájtok írása az L eltolástól kezdve
Megjegyzések
A C4789 a puffertúlcsordulásokra figyelmeztet adott C futásidejű (CRT) függvények használatakor. A paraméterek átadásakor vagy a hozzárendelések végrehajtásakor a méreteltéréseket is jelentheti. A figyelmeztetés akkor lehetséges, ha az adatméretek a fordításkor ismertek. Ez a figyelmeztetés olyan helyzetekre vonatkozik, amelyek elkerülhetik az adatméretek eltérésének tipikus észlelését.
A C4789 figyelmeztet, amikor az adatok olyan adatblokkba kerülnek, amelyről ismert, hogy a fordítás időpontjában túl kicsi.
A figyelmeztetés akkor fordul elő, ha a példány ezen CRT-függvények egyikének belső formáját használja.
A figyelmeztetés akkor is megjelenik, ha egy paramétert egy nagyobb adattípushoz ad, majd másolási hozzárendelést hajt ki egy lvalue-hivatkozásból.
A Visual C++ létrehozhatja ezt a figyelmeztetést egy olyan kódútvonal esetén, amely soha nem hajtódik végre. A figyelmeztetést #pragmaideiglenesen letilthatja az alábbi példában látható módon:
#pragma warning( push )
#pragma warning( disable : 4789 )
// unused code that generates compiler warning C4789
#pragma warning( pop )
Ez a kifejezés megakadályozza, hogy a Visual C++ generálja az adott kódblokkra vonatkozó figyelmeztetést. A #pragma warning(push) módosítás előtt #pragma warning(disable: 4789) megőrzi a meglévő állapotot. A #pragma warning(pop) visszaállítja a pusholt állapotot, és eltávolítja a #pragma warning(disable:4789) hatásait. A C++ előfeldolgozási irányelvről #pragmatovábbi információt a warning című témakörben talál__Pragma.
A /sdl (További biztonsági ellenőrzések engedélyezése) fordítóbeállítás a figyelmeztetést hibává emeli át.
Példák
Az alábbi példa c4789-et hoz létre:
// 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 következő példa c4789-et is létrehoz:
// 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
}