Udostępnij za pośrednictwem


Iteratory zaznaczone

Iteratory Checked upewnij się, że granice pojemnika nie są zastępowane.

Iteratory Checked stosuje się do wydania buduje i program Debug: polecenie buduje.Aby uzyskać więcej informacji na temat używania Iteratory podczas kompilacji w trybie debugowania, zobacz Obsługa iteratora debugowania.

Uwagi

Aby uzyskać informacje dotyczące wyłączania ostrzeżeń generowanych przez checked Iteratory, zobacz _SCL_SECURE_NO_WARNINGS.

Można użyć następujących symbolu z funkcją Iteratory checked.

  • _SECURE_SCL

    Ważna uwagaWażne

    Use _ITERATOR_DEBUG_LEVEL to control _SECURE_SCL.Aby uzyskać więcej informacji, zobacz _ITERATOR_DEBUG_LEVEL.

    Jeśli _SECURE_SCL jest zdefiniowana jako 1, niebezpieczne jest używanie Iteratory powoduje błąd w czasie wykonywania, a program jest przerywane.Jeśli została zdefiniowana jako 0, Iteratory sprawdzane są wyłączone.Domyślnie wartość dla _SECURE_SCL jest 0 w trybie budowania wersji i 1 do buduje debugowania.

Gdy _SECURE_SCL jest zdefiniowany jako 1, po SCL są sprawdzane:

Gdy _SECURE_SCL jest zdefiniowana jako 0:

  • Wszystkie standardowe Iteratory są zaznaczone (Iteratory można przenosić poza granice kontenera, co prowadzi do niezdefiniowanych zachowań).

  • Jeśli iterację danych wyjściowych jest sterująca checked dostaniesz zachowanie sprawdzone na wywołania funkcji standardowych (na przykład, std::copy).

  • Jeśli iterację danych wyjściowych jest niezaznaczone iterację dostaniesz niesprawdzony zachowanie na wywołania funkcji standardowych (na przykład, std::copy).

Sprawdzone sterująca odnosi się do iteratora, która będzie połączenie invalid_parameter_handler Jeśli próbujesz przenieść poza granice kontenera.Więcej informacji o invalid_parameter_handler, zobacz Sprawdzanie poprawności parametru.

checked_array_iterator Classi unchecked_array_iterator Class są adaptery sterująca, które obsługują Iteratory checked.

Przykład

Przy kompilacji przy użyciu _SECURE_SCL 1, błąd wykonania będzie występować przy próbie uzyskania dostępu do elementu, który znajduje się poza pojemnika za pomocą operatora indeksowania niektórych klas.

// 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
};

Ten program umożliwia wydrukować "67", a następnie pop okno dialogowe na błąd twierdzenie o dodatkowe informacje o awarii.

Podobnie, kiedy będzie kompilować za pomocą _SECURE_SCL 1, błąd wykonania będzie występować przy próbie uzyskania dostępu do elementu za pomocą przodu lub z tyłu pewnych klas, gdy kontener jest pusty.

// 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
};

Ten program wyświetli się okno dialogowe na błąd twierdzenie o dodatkowe informacje o awarii.

Zobacz też

Informacje

Standardowa biblioteka C++ Przegląd

Obsługa iteratora debugowania