Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
303 views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...