Avertissement du compilateur (niveau 3) C4748

/GS ne peut pas protéger les paramètres et les variables locales contre le dépassement de mémoire tampon locale, car les optimisations sont désactivées dans la fonction

/GS (Vérification de la sécurité de la mémoire tampon), qui est activé par défaut, ne peut pas protéger les paramètres et les variables locales contre un dépassement de mémoire tampon locale dans une fonction à moins que des optimisations soient activées dans la fonction.

Le compilateur désactive les optimisations si une fonction a un code d'assembly inline qui contient un flux d'instructions de contrôle (jmp ou jcc, par exemple).

Laissez les optimisations remédier à cet avertissement et autoriser /GS à protéger les paramètres et mes variables locales contre un dépassement de mémoire tampon locale.

Exemple

L'exemple suivant génère l'erreur C4748 :

// C4748.cpp
// compile with: /O2 /W3
#include <string.h>
#include <stdlib.h>

#pragma optimize("", off)
void f(const char *str) {  // C4748 warning
   char buf[100];
   strcpy_s(buf, _countof(buf), str);
}
#pragma optimize("", on)

int main() {
   f("aa");
}