Поведение функции с доступом к буферу за пределами границC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Поведение функции с доступом к буферу за пределами границ

Сообщение Anonymous »

Здесь я наткнулся на функцию getBitByPos и пытаюсь понять ее логику. Я постоянно вижу значение 204 при доступе к буферу, когда мне кажется, что доступ выходит за пределы. Такое поведение меня смущает, так как я ожидаю ошибки.
Я хочу выяснить, почему функция может работать, несмотря на доступ за пределами буфера, и есть ли основные причины для такого последовательного вывода.
Например, если буфер содержит только одно значение (например, 1), а pos также равно 1, функция правильно возвращает 0.
Однако, когда значение буфера равно 8, вычисление приводит к pos / 8 = 1, что обеспечивает доступ ко второму элементу массива (который не существует). Во время отладки я всегда вижу в этой позиции значение 204. В результате выражение buffer[pos / 8] >> (8 - pos % 8) & 0x01 возвращает 0.
С другой стороны, когда значение буфера равно 9, то же выражение возвращает 1.

Код: Выделить всё

#include 
#include 

int32_t getBitByPos(unsigned char* buffer, int32_t pos)
{
int test1 = buffer[pos / 8];
int test2 = buffer[pos / 8] >> (8 - pos % 8) & 0x01;
return (buffer[pos / 8] >> (8 - pos % 8) & 0x01);
}
Было ли такое поведение намеренным со стороны автора?
Могу ли я рассчитывать на то, что эта функция предоставит правильные результаты?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/790 ... fer-access
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»