Dla surowych tablic, nie sądzę więc, bo -fbounds-check
nie działa ze swoim przykładem i MinGW g ++ 4.4.1, a ponieważ stary docs 3.x muszę powiedzieć
-fbounds -Check
na przednich końcach, które go obsługują, generować dodatkowy kod, aby sprawdzić, wskaźniki stosowane do tablic dojazdowych są w zadeklarowanym przedziale. Jest to obecnie obsługiwane tylko przez interfejsy Java i Fortran 77, gdzie ta opcja domyślnie jest równa true i false .
Jednak z std::vector
można użyć at
mieć nieco niepraktyczne run-time Granice obszaru kontroli (generuje wyjątek). Można również użyć specjalnej wersji biblioteki standardowej do debugowania, która zapewnia praktyczne sprawdzanie granic czasu wykonywania dla []
. Na przykład podczas kompilacji & hellip;
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> arr(2);
cout << arr[ 4 ] << endl;
}
& hellip; masz inny odpowiednio braku kontroli oraz zachowanie kontroli wersji dla uwalniania i debugowania w g ++ standardowej implementacji biblioteki:
C:\test> g++ x.cpp & a
4083049
C:\test> g++ x.cpp -D _GLIBCXX_DEBUG -D _GLIBCXX_DEBUG_PEDANTIC & 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> _
Podobno na nowsze wersje g ++ (po 4,0), nie trzeba się _GLIBCXX_DEBUG_PEDANTIC
symbol. Aby uzyskać szczegółowe informacje, patrz GNU documentation.
Cheers & HTH.,
'-Wall -Wextra -ansi -pedantic' nie generują ostrzeżenia dla tego programu :( – EnabrenTane