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ż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:
Wszystkie standardowe Iteratory (na przykład, vector::iterator) są sprawdzane.
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 sterująca danych wyjściowych jest niezaznaczone iterację wywołania funkcji standardowych spowoduje, że ostrzeżenia kompilatora.
Następujące funkcje spowoduje wygenerowanie błędu czasu wykonywania, jeśli ma dostępu, który znajduje się poza kontenera:
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.