Aracılığıyla paylaş


İşaretli Yineleyiciler

İşaretli yineleyiciler, kapsayıcı sınırları geçersiz kılınmaz emin olun.

İşaretli yineleyiciler yapıları serbest bırakmak ve yapıların hata ayıklamak için geçerlidir. Hata ayıklama modunda derlediğinizde yineleyiciler kullanma hakkında daha fazla bilgi için bkz: Hata ayıklama Yineleyici desteği.

Notlar

İşaretli yineleyiciler tarafından oluşturulan uyarıları devre dışı bırakma hakkında daha fazla bilgi için bkz: _SCL_SECURE_NO_WARNINGS.

Aşağıdaki simge ile işaretli yineleyiciler özelliğini kullanabilirsiniz.

  • _SECURE_SCL

    Önemli

    Use _ITERATOR_DEBUG_LEVEL to control _SECURE_SCL.Daha fazla bilgi için bkz. _ITERATOR_DEBUG_LEVEL.

    _SECURE_SCL 1, Güvenli olmayan bir çalışma zamanı hatası ve programı sona erdi yineleyiciler nedenleri olarak kullanılmasını tanımlanır. 0 Tanımlanan, işaretli yineleyiciler devre dışı kalır. Varsayılan değeri _SECURE_SCL ayıklama yapılarında Sürüm yapıları için 0 ve 1 belirtilir.

Zaman _SECURE_SCL tanımlanan 1 scl denetimleri gerçekleştirilir:

Zaman _SECURE_SCL 0 olarak tanımlanır:

  • Tüm standart yineleyiciler denetlenmeyen (yineleyiciler taşıyabilirsiniz kapsayıcı sınırlarının ötesinde, Tanımsız davranışa yol açar).

  • Çıkış Yineleyici tanımlarına ise standart işlev çağrıları, denetlenen davranış elde edersiniz (örneğin, std::copy).

  • Çıkış Yineleyici denetlenmeyen bir yineleyici ise standart işlev çağrıları üzerinde denetlenmeyen davranış elde edersiniz (örneğin, std::copy).

Yineleyici çağıracak tanımlarına başvuran invalid_parameter_handler konteyner sınırlarını taşımayı denerseniz. invalid_parameter_handler hakkında daha fazla bilgi için, bkz. Parametre doğrulama.

checked_array_iterator Classve unchecked_array_iterator Class işaretli yineleyiciler destekleyen Yineleyici bağdaştırıcıları şunlardır.

Örnek

Ne zaman derleme kullanarak _SECURE_SCL 1, bir çalışma zamanı hatası oluşur bazı sınıfların dizin oluşturma işlecini kullanarak kapsayıcı sınırları dışında olan bir öğe erişmeyi denerseniz.

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

Bu program, "67" baskı sonra hata hakkında ek bilgi içeren bir onaylama işlemi hatası iletişim kutusu açılır.

Benzer şekilde, kullanarak derleme ne zaman _SECURE_SCL 1, bir çalışma zamanı hatası oluşur öğe kapsayıcı boş olduğunda ön ya da arkasına bazı sınıflarını kullanarak erişmeyi denerseniz.

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

Bu program kurma hatası hakkında ek bilgi içeren bir onaylama işlemi hatası iletişim kutusu açılır.

Ayrıca bkz.

Başvuru

Standart C++ Kitaplığı genel bakış

Hata ayıklama Yineleyici desteği