Для необработанных массивов я так не думаю, потому что -fbounds-check
не работал с вашим примером и MingW g ++ 4.4.1, а также потому, что у меня есть старые документы 3.x, которые я говорю
-fbounds-check
Для внешних интерфейсов, которые его поддерживают, сгенерируйте дополнительный код, чтобы проверить, что индексы, используемые для доступа к массивам, находятся в заявленном диапазоне.В настоящее время это поддерживается только внешними интерфейсами Java и Fortran 77, где этот параметр по умолчанию имеет значение true и false соответственно.
Однако с std::vector
вы можете использовать at
, чтобы немногонепрактичная проверка границ во время выполнения (генерирует исключение).И вы можете использовать специальную отладочную версию стандартной библиотеки, которая обеспечивает практическую проверку границ во время выполнения для []
.Например, при компиляции…
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> arr( 2 );
cout << arr[ 4 ] << endl;
}
… вы получаете различное, соответственно, не проверяющее и не проверяющее поведение для версий выпуска и отладки реализации стандартной библиотеки g ++:
C:\test> g++ x.cpp & a
4083049
C:\test> g++ x.cpp <b>-D _GLIBCXX_DEBUG -D _GLIBCXX_DEBUG_PEDANTIC</b> & a
c:\program files\mingw\bin\../lib/gcc/mingw32/4.4.1/include/c++/debug/vector:265:
error: attempt to subscript container with out-of-bounds index 4, but
container only holds 2 elements.
Objects involved in the operation:
sequence "this" @ 0x0x22ff1c {
type = NSt7__debug6vectorIiSaIiEEE;
}
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
C:\test> _
Сообщается дляв новых версиях g ++ (после 4.0) вам не нужен символ _GLIBCXX_DEBUG_PEDANTIC
.Подробнее см. Документацию GNU .
Приветствия и hth.,