Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: All
May 18, 1998



Building the Right Environment to Support AI, Machine Learning and Deep Learning

No Pointer Arithmetics Outside Array Bounds!

Sometimes it is tempting to let a pointer point to a location that is slightly beyond an array's index range. For example, consider the following self-defined array class, which allows you to define arrays whose index ranges do not necessarily start at zero:
     class MyArray
         T*  ptr;
         int f, l;
         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 the address of the real array by the value of first, first need not be subtracted from index in operator[]. A neat trick, right?

Unfortunately, the C++ standard draft says that a call to operator[] would result in undefined behavior. Even if it runs fine on your system, there are definitely systems on which this is not the case. An expression with pointer arithmetics is well defined only if all involved pointers and all results of partial expressions point to elements of one--and only one--array.

Karsten Weihe
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date