Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Доступ за пределами размера массива

#cpp


Изучаю основные возможности С++ и вот такой код :

int mas[12];

mas[15]=15;
cout<<"15 element = "<


Ответы

Ответ 1



C++ — небезопасный язык. Правила языка говорят, что нельзя выходить за границы выделенной памяти. Ответственность за выполнение правил возлагается на вас, программиста. C++, в отличие от безопасных языков, не проверяет, следуете ли вы правилам, поэтому вы не получите ошибку непосредственно в этой точке. Но раз вы нарушили правила, может случиться любая неприятность. Стандарт подчёркивает, что при нарушении вами правил все гарантии языка снимаются. При чтении за границами массива, если вам повезёт, и память по смещению в 15 размеров элемента от начала массива доступна, и не содержит ничего плохого (на интеловской архитектуре «плохого» не бывает, но на других вполне) и если оптимизатор не очень умный, вы просто прочитаете какое-то непонятное значение. В случае, если вам повезёт меньше, программа просто упадёт. А в совсем плохом случае программа начнёт вести себя странно, причём в каком-то далёком, не связанном с этой точкой месте. При записи всё ещё хуже, по этому адресу может случайно оказаться какая-нибудь важная структура данных (например, это может быть адрес возврата из текущей функции), и вы перезапишете его каким-то непонятным значением по принципу «на кого бог пошлёт». Просто не делайте так, C++ доверяет вам.

Комментариев нет:

Отправить комментарий