metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
Выход за границу массива

Выход за границу массива

06 Мар 2013

Выход за границу массива (Array index out of bounds) - это частный случай переполнения буфера. Ошибка возникает, если индекс, с помощью которого обращаются к элементам массива, превышает допустимое значение. При этом идет обращение за границы массива, что является неопределенным поведением. Это возможно потому, что в языках программирования Си и Си++ нет контроля выхода за границы массива.

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

Вот несколько примеров данной ошибки, найденных в коде реальных open-source проектов с помощью статического анализатора PVS-Studio.

Проект Dumb – динамическая универсальная музыкальная библиотека.

struct IT_SAMPLE
{
  ....
  unsigned char filename[14];
  ....
};

static int it_riff_dsmf_process_sample(
  IT_SAMPLE * sample, const unsigned char * data, int len)
{
  int flags;
  memcpy( sample->filename, data, 13 );
  sample->filename[ 14 ] = 0;
  ....
}

Массив 'filename' состоит из 14 элементов, однако в функции 'it_riff_dsmf_process_sample' идет обращение к 14 элементу, который находится за границами массива. Такую ошибку часто допускают, забывая, что индексация массивов в Си/Си++ начинается с нуля и заканчивается значением на единицу меньше размера массива.

Рассмотрим еще одну подобную ошибку. Проект Wolfenstein 3D - компьютерная игра, разработанная 'id Software'.

typedef struct bot_state_s
{
  ...
  char teamleader[32]; //netname of the team leader
  ...
}  bot_state_t;

void BotMatch_StartTeamLeaderShip(
  bot_state_t *bs, bot_match_t *match)
{
  ...
  bs->teamleader[sizeof( bs->teamleader )] = '\0';
  ...
}

В данном случае ошибка заключается в том, что 'sizeof(Array)' вернет размер массива, а для обращения к последнему элементу следует вычесть единицу из результата 'sizeof(Array)'.

Другие примеры таких ошибок, найденных методикой статического анализа, можно посмотреть здесь.

Популярные статьи по теме
5 причин, почему статический анализ кода важен для бизнеса

Дата: 20 Апр 2023

Автор: Андрей Карпов

В статье разбираются 5 основных причин, почему статический анализ кода будет полезен бизнесу, связанному с разработкой программного обеспечения. Статья поможет принять решение, стоит ли познакомиться…
Можно автоматизировать обзор кода?

Дата: 18 Апр 2023

Автор: Андрей Карпов

Автоматизация обзоров кода возможна с помощью инструментов статического анализа. Следует учитывать, что разовые проверки непродуктивны, поэтому очень важно, чтобы статический анализ кода стал...
Личный кабинет PVS-Studio

Дата: 31 Мар 2023

Автор: Тимур Макаев

В этой заметке предлагаем познакомиться с новым веб-сервисом от PVS-Studio. Речь идёт о личном кабинете пользователя. Он будет полезен всем активным читателям нашего блога, а также тем, кто решит...
Reddit для программистов

Дата: 27 Мар 2023

Автор: Ульяна Гришина

Эта статья посвящена одной популярной и активной площадке на просторах Интернета — Reddit. Кто не в курсе, Reddit — это платформа, где сосуществуют тысячи сообществ по интересам. Мы любим Reddit за...
Хорошо ли ChatGPT ищет ошибки в коде?

Дата: 02 Мар 2023

Автор: Артём Ровенский

Нейросети всё больше вливаются в привычный мир, пытаясь упростить нам жизнь. Тот же ChatGPT вызвал бурю обсуждений в интернете. Чат бот способен писать тексты, код, рефераты и песни. Он даже умеет...


Комментарии (0)

Следующие комментарии next comments
close comment form