From this reference, In C it seems the following behavior is undefined.
int my_array[100][50];
int *p = my_array[0];
p[50]; // UB
Is there a reference in C++03 or C++11 which confirms this?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Yes in the description of the + operator. You may not dereference that pointer in C because it is a past the end pointer for the first subarray. In C++ this currently is legal because the pointer points to a valid integer (the points to relation is defined somewhere in clause 3). However in both standards adding more than 50 yields undefined behavior.
A DR was recently sent to the c++ committee about the rule that dereferencing such “valid out of thin air” pointers may be dereferenced, so i would not rely on that.