Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Grenzüberprüfung für „std::vector“ in C aktivieren und deaktivieren?

Wie kann ich die Grenzüberprüfung für „std::vector“ in C aktivieren und deaktivieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 09:30:29829Durchsuche

How can I enable and disable bounds checking for `std::vector` in C  ?

Compiler-Optionen für Bound Checking Array Access in C Vector

Die C-Standardbibliothek stellt den Typ std::vector bereit, ein dynamisches Array, das sorgt für Speichersicherheit. Der Zugriff auf Elemente mit „operator[] birgt jedoch das inhärente Risiko eines undefinierten Verhaltens, wenn der Index außerhalb der Grenzen liegt.

Grenzüberprüfung im Debug-Modus aktivieren

Um Grenzen zu aktivieren Bei der Suche nach „operator[]“ in Visual Studio kann das Makro _SECURE_SCL auf einen Wert ungleich Null definiert werden. Dadurch wird die Bereichsprüfung während der Laufzeit erzwungen, was zu einer std::out_of_range-Ausnahme führt, wenn auf einen ungültigen Index zugegriffen wird.

Grenzprüfung im Release-Modus deaktivieren

Um die Leistung zu optimieren In Release-Builds kann die Grenzprüfung deaktiviert werden, indem _SECURE_SCL auf 0 gesetzt wird. Dadurch entfällt der mit der Bereichsüberprüfung verbundene Laufzeitaufwand.

Beispiel:

<code class="cpp">// Enable bounds checking in debug mode (assuming Visual Studio 2008 or earlier)
#ifdef _DEBUG
#define _SECURE_SCL 1
#endif

// ...
std::vector<std::vector<int>> v;
v[0][1]; // Throws `std::out_of_range` if i or j is out of bounds</code>

Hinweis:

  • Visual Studio 2005 und 2008 aktivieren die Grenzüberprüfung standardmäßig sowohl in Debug- als auch in Release-Builds.
  • Ab Visual Studio 2010 ist die Grenzüberprüfung standardmäßig aktiviert in Debug-Builds, aber in Release-Builds deaktiviert. Das Makro _ITERATOR_DEBUG_LEVEL steuert dieses Verhalten.

Das obige ist der detaillierte Inhalt vonWie kann ich die Grenzüberprüfung für „std::vector“ in C aktivieren und deaktivieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn