Поведение функции с доступом к буферу за пределами границ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

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