Jump to content

Повреждение памяти

(Перенаправлено с Повреждения кучи )

Повреждение памяти происходит в компьютерной программе , когда содержимое ячейки памяти изменяется из-за программного поведения, которое выходит за рамки намерений исходного программиста или программных/языковых конструкций; это называется нарушением безопасности памяти . Наиболее вероятными причинами повреждения памяти являются ошибки программирования (ошибки программного обеспечения). Когда поврежденное содержимое памяти используется позже в этой программе, это приводит либо к сбою программы, либо к странному и причудливому поведению программы. Почти 10% сбоев приложений в системах Windows происходят из-за повреждения кучи . [ 1 ]

Современные языки программирования, такие как C и C++, обладают мощными возможностями явного управления памятью и арифметики указателей . Эти функции предназначены для разработки эффективных приложений и системного программного обеспечения. Однако неправильное использование этих функций может привести к ошибкам повреждения памяти.

Повреждение памяти — один из наиболее трудноразрешимых ошибок программирования по двум причинам:

  1. Источник повреждения памяти и его проявления могут находиться далеко друг от друга, что затрудняет сопоставление причины и следствия.
  2. Симптомы появляются в необычных условиях, что затрудняет последовательное воспроизведение ошибки.

Ошибки повреждения памяти можно разделить на четыре категории:

  1. Использование неинициализированной памяти . Содержимое неинициализированной памяти рассматривается как мусорные значения. Использование таких значений может привести к непредсказуемому поведению программы.
  2. Использование чужой памяти. Обычно для доступа к памяти и ее изменения используются указатели. Если такой указатель является нулевым указателем, висячим указателем (указывающим на уже освобожденную память) или на ячейку памяти за пределами текущего стека или границ кучи , он ссылается на память, которая на тот момент не принадлежала программе. Использование таких указателей является серьезным недостатком программирования. Доступ к такой памяти обычно вызывает исключения операционной системы, которые чаще всего приводят к сбою программы (если не используется подходящее программное обеспечение для защиты памяти).
  3. Использование памяти, превышающей выделенную память ( переполнение буфера ): если массив используется в цикле с неверным условием завершения, память за пределами границ массива может быть случайно манипулирована. Переполнение буфера — одна из наиболее распространенных ошибок программирования, используемая компьютерными вирусами, вызывающая серьезные проблемы компьютерной безопасности (например, атака возврата в libc , защита от разрушения стека ) в широко используемых программах. В некоторых случаях программы также могут некорректно обращаться к памяти до начала буфера.
  4. Неправильное управление памятью в куче. Утечки памяти и освобождение некучей или нераспределенной памяти являются наиболее частыми ошибками, вызванными неправильным управлением памятью в куче.

Многие отладчики памяти, такие как Purify , Valgrind , Insure++ , Parasoft C/C++test , AddressSanitizer, доступны для обнаружения ошибок повреждения памяти.

См. также

[ редактировать ]
  1. ^ Радич, К.; Шерер, Т.; Шарки, К.; Бэтчелор, Д.; Кеннеди, Джей Ти; Мэби, Д.; Коултер, Д.; Майкл, С. (28 апреля 2021 г.). «Проверщик приложений (книга качества приложений для Windows 7 и Windows Server 2008 R2) — приложения Win32» . Сеть разработчиков Microsoft . Проверено 9 февраля 2022 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 503cc7beb2dff6a98a38d9cad6e57373__1690033560
URL1:https://arc.ask3.ru/arc/aa/50/73/503cc7beb2dff6a98a38d9cad6e57373.html
Заголовок, (Title) документа по адресу, URL1:
Memory corruption - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)