Ist es möglich, zum aktivieren der überprüfung von array-Grenzen, die in g++?
Ist es möglich, g++ Karte zu einem Fehler beim kompilieren die folgende Datei mit einigen flag?
#include <iostream>
using namespace std;
int main()
{
int arr[ 2 ];
cout << arr[ 4 ] << endl;
return 0;
}
Sah ich einige Dinge, wie gcc -Wall -O2 main.c
die funktioniert nur mit C, nicht C++.
InformationsquelleAutor der Frage 827 | 2011-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Verwendung einer statischen Analysator wie Cppcheck. Wenn Sie obigen code:
Integrieren Sie Cppcheck in Ihren build-Verfahren und betrachten Sie Ihren code eingebaut nur erfolgreich, wenn Cppcheck geht.
InformationsquelleAutor der Antwort Greg Hewgill
Nicht zur compile-Zeit. Sie könnten in der Lage sein zu überprüfen, dass zur Laufzeit obwohl.
Für, nehmen Sie einen Blick auf:
Laufzeit-überprüfung von array-Grenzen mit g++
InformationsquelleAutor der Antwort vmpstr
Für roh-arrays, ich denke nicht so, weil
-fbounds-check
hat nicht funktioniert mit deinem Beispiel und MingW g++ 4.4.1, und weil die alten 3.x-docs ich muss sagenJedoch mit
std::vector
können Sieat
etwas unpraktisch run-time bounds-checking (generiert Ausnahme). Und Sie können eine spezielle debug-version der standard-Bibliothek, die einen praktischen run-time bounds-checking für[]
. Zum Beispiel, beim kompilieren...... erhalten Sie unterschiedliche bzw. nicht-überprüfung und Kontrolle von Verhalten für release und debug Versionen von g++ - standard-Bibliothek Implementierung:
Angeblich für neuere g++ - Versionen (nach 4.0) brauchen Sie nicht die
_GLIBCXX_DEBUG_PEDANTIC
symbol. Für details, siehe die GNU-Dokumentation.Cheers & hth.,
InformationsquelleAutor der Antwort Cheers and hth. - Alf
Ich erinnere mich da ein gcc oder g++ Warnung vom ffmpeg oder x264 entlang der Linien von
"Warnung index des array kann out-of-bounds"
http://gcc.gnu.org/ml/gcc/2000-07/msg01000.html
scheint, wie es wahrscheinlich gemacht.
Die Einschränkung ist, dass Sie ein Beispiel wie deins oben. sobald Sie haben, haben Sie Variablen anstelle von literalen ist es nicht möglich. außer vielleicht in eine einfache Schleife.
InformationsquelleAutor der Antwort EnabrenTane
Kann man ersetzen-arrays mit
std::vector
. Vektor-accessor-member-Funktion (std::vector::at
) kein bounds checking zur Laufzeit.Compile-Zeit prüfen Puffer-überlauf ist eine sehr harte unentscheidbaren problem, leider. Es ist in der Regel behandelt durch eine vollständige geblasen statische Analyse-tool.
InformationsquelleAutor der Antwort ryaner