No Pointer Arithmetics Outside Array Bounds!

Sometimes it is tempting to let a pointer point to a location that isslightly beyond an array’s index range. For example, consider the followingself-defined array class, which allows you to define arrays whose indexranges do not necessarily start at zero:

      template      class MyArray       {         T*  ptr;         int f, l;       public:         MyArray (int first, int last)           : f(first), l(last)           {             ptr = new T [last-first+1];  // Why +1?             ptr -= first;           }         T& operator[] (int index)           {             return ptr[index];           }         // Further methods       };

The trick is simple and elegant and might result in very efficient code:Since the address stored in ptr differs from theaddress of the real array by the value of first,first need not be subtracted from index inoperator[]. A neat trick, right?

Unfortunately, the C++ standard draft says that a call tooperator[] would result in undefined behavior. Evenif it runs fine on your system, there are definitely systems on whichthis is not the case. An expression with pointer arithmetics is welldefined only if all involved pointers and all results of partialexpressions point to elements of one–and only one–array.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: