Ce message de l'analyseur de code semble être basé sur le principe que le contenu de la mémoire tampon serait défini seul en tant que sortie de memset()
. Il manque le point que la boucle après memset()
complète cette entrée.
Si vous double-cliquez sur l'avertissement, vous pouvez obtenir une mise en surbrillance des lignes considérées pour déclencher cet avertissement.
Mais le code que vous écrivez est correct, vous n'avez donc pas à vous soucier du résultat ici. La documentation en ligne, dit « pourrait » non « volonté »:
Cet avertissement indique que l'étendue lisible de la mémoire tampon spécifiée peut être plus petit que l'indice utilisé pour lire.
Remarques complémentaires:
Au moment de ce qui se passe plus évident pour l'analyseur, il apporte toujours les mêmes avertissements abusifs:
memset(buf, '0', 16);
memset(buf + 16, 0x00, 2); // for replacing the loop
Dans ce cas, l'analyseur remarque la deuxième memset()
. Mais comme il n'affecte pas buf depuis son début, il s'agit d'une entrée/sortie à une opération tampon sans prendre en compte la longueur supplémentaire.
Même ce genre sur-precautiononous Code soulève l'avertissement:
memset(buf, 0x00, sizeof(buf)); // completeky initalize the buffer
memset(buf, '0', 16); // overwrite just the beginning
Ici, il semble que dès qu'une cible opération memxxx()
BEGIN du tampon, la durée de cette opération est considérée comme la partie unique initialisée. Donc, oui, l'avertissement est ennuyeux, mais faites confiance à votre code. Je ne pouvais me débarrasser de l'avertissement en faisant un codage unefficient vraiment bizarre:
memset(buf, 0x00, sizeof(buf)); // 18 bytes get initalized
memset(buf + 1, '0', 15); // not begin of buffer
buf[0] = '0'; // not a memxxx() operation
Malheureusement, la configuration de l'analyseur ne permet pas de désactiver simplement cette règle unique, mais l'ensemble des règles de vérification de sécurité.
Veuillez fournir l'avertissement. Aussi, quel compilateur? – Barry
Impossible de reproduire, je ne vois aucun avertissement. S'il vous plaît dites-nous votre compilateur + version + options (ou quel que soit l'outil produit l'avertissement). http: //coliru.stacked-crooked.com/a/90211ae6e2daa5c7 –
Et en passant, y a-t-il une raison valable pour laquelle vous n'utilisez pas 'std :: vector's? –