Стандарт С++ (и C в этом случае) позволяет создавать (а не разыменовывать) указатель на один элемент за конец массива. Означает ли это, что массив никогда не будет выделен в таком месте, где его последний элемент заканчивается на границе памяти? Я понимаю, что на практике некоторые/все реализации могут следовать этому соглашению, но какое из них справедливо:
- Это фактически false, и массив может закончиться на границе памяти, OR
- Стандарт С++ имеет мандат для завершения, по крайней мере, одного значения ценности памяти перед границей, OR
- Ни 1, ни 2, но в реальных компиляторах это все равно, потому что упрощает реализацию.
Что-нибудь другое для случая C?
Update:
Кажется, что 1 - правильный ответ. См. Ответ от Джеймса Канзе ниже, а также см. efence
(http://linux.die.net/man/3/efence - спасибо Майклу Частинэю за указатель на него)