This is the mail archive of the
mailing list for the GCC project.
bounds checking in STL containers
- From: Ахриев Альберт <aaahaaah at yandex dot ru>
- To: gcc at gcc dot gnu dot org
- Date: Mon, 15 Oct 2012 21:14:41 +0400
- Subject: bounds checking in STL containers
It appears that operator in STL containers (e.g. vector, deque) does not check bounds any more (g++ 4.7.2).
Two-three generations ago g++ was very cautious about consistency checking but not now.
I would appeal to developers to reconsider this pretty tough decision.
I have recently experienced a problem with operator. The vector instance had its capacity larger than the size.
Mistakenly addressing element beyond the true range did not cause immediate crash rather the output of a complex signal
processing application was "strange". This is a pretty common situation (when capacity > size), which is very hard to track,
especially if the elements beyond the valid range have accidentally the "reasonable" values.
I believe that a simple bounds checking in DEBUG mode (say, assert(first + n < last)) would rule out
most of potentially dangerous situations like aforementioned one. Otherwise we get back to C-style arrays.