Partager via


Itérateurs vérifiés

Les itérateurs vérifiés garantir que les limites de votre conteneur ne sont pas remplacées.

Les itérateurs vérifiés s'appliquent aux versions release et les versions debug.Pour plus d'informations sur l'utilisation des itérateurs lorsque vous compilez en mode débogage, consultez Déboguez une prise en charge des itérateurs.

Notes

Pour plus d'informations sur la désactivation des avertissements générés par les itérateurs vérifiés, consultez _SCL_SECURE_NO_WARNINGS.

Vous pouvez utiliser le symbole suivant avec la configuration d'itérateurs vérifiés.

  • _SECURE_SCL

    Important

    Utilisation _ITERATOR_DEBUG_LEVEL de contrôler _SECURE_SCL.Pour plus d'informations, consultez _ITERATOR_DEBUG_LEVEL.

    Si _SECURE_SCL est défini comme 1, l'utilisation potentiellement dangereuse les itérateurs provoque une erreur d'exécution et le programme est terminé.Si défini comme 0, itérateurs vérifiés sont désactivés.Par défaut, la valeur de _SECURE_SCL est 0 pour les versions release et 1 pour les versions debug.

Lorsque _SECURE_SCL est défini comme 1, les contrôles suivants de câble coaxial sont effectuées :

Lorsque _SECURE_SCL est défini comme 0 :

  • Tous les itérateurs standard sont désactivés (les itérateurs peuvent déplacer au delà de les limites du conteneur, qui conduit au comportement non défini).

  • Si un itérateur de sortie est un itérateur vérifié vous obtiendrez avez extrait le comportement sur les appels à la fonction standard (par exemple, std::copy).

  • Si un itérateur de sortie est un itérateur non réprimé vous obtiendrez un comportement non réprimé sur les appels à la fonction standard (par exemple, std::copy).

Un itérateur vérifié fait référence à un itérateur qui appelle invalid_parameter_handler si vous essayez de déplacer au delà de les limites du conteneur.Pour plus d'informations sur invalid_parameter_handler, consultez Validation des paramètres.

checked_array_iterator Class et unchecked_array_iterator Class sont les adaptateurs des itérateurs qui prennent en charge des itérateurs vérifiés.

Exemple

Lorsque vous compilez à l'aide de _SECURE_SCL 1, une erreur d'exécution se produit si vous tentez d'accéder à un élément situé en dehors de les limites du conteneur à l'aide de l'opérateur d'indexation de certaines classes.

// checked_iterators_1.cpp
// cl.exe /Zi /MDd /EHsc /W4
 
#define _ITERATOR_DEBUG_LEVEL 1
// implies #define _SECURE_SCL 1
 
#include <vector>
#include <iostream>
 
using namespace std;
 
int main() 
{
    vector<int> v;
    v.push_back(67);
 
    int i = v[0];
    cout << i << endl;
 
    i = v[1]; // triggers invalid parameter handler
};

Ce programme imprimera « 67 " dépilent ensuite une boîte de dialogue d'échec d'assertion avec des informations supplémentaires sur l'échec.

De même, lorsque vous compilez à l'aide de _SECURE_SCL 1, une erreur d'exécution se produit si vous tentez d'accéder à un élément à l'aide de l'avant ou arrière du de certaines classes, lorsque le conteneur est vide.

// checked_iterators_2.cpp
// cl.exe /Zi /MDd /EHsc /W4
 
#define _ITERATOR_DEBUG_LEVEL 1
// implies #define _SECURE_SCL 1
 
#include <vector>
#include <iostream>
 
using namespace std;
 
int main() 
{
    vector<int> v;
 
    int& i = v.front(); // triggers invalid parameter handler
};

Ce programme dépilera une boîte de dialogue d'échec d'assertion avec des informations supplémentaires sur l'échec.

Voir aussi

Référence

Vue d'ensemble de la bibliothèque C++ standard

Déboguez une prise en charge des itérateurs