#1 2022-07-08 23:53:30

Krepton85
Учасник
Зареєстрований: 2017-11-24
Повідомлень: 9

Почему компилятор не проверяет индекс массива не в его диапазона?

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

char model[8];//8 - размер массива в байтах

bool test = 0;
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
model[8] = 'n';//ошибка, индекс массива начинается с нуля и заканчиваться должен на 7
Serial.print(F("test = "));
Serial.println(test);

}

void loop() {
  // put your main code here, to run repeatedly:
Serial.print(F("test = "));
Serial.println(test);
delay(1000);
}

Воспроизвести эту ошибку в этом примере не получилось, но случилось следующее, в процессе работы моего огромного скетча на Raspberry Pi Pico , булевая переменная test, начала неожиданно принимать значение = 10. smile  Потратил кучу времени что бы найти в каком месте скетча это может происходить, хорошо хоть вспомнил, что недавно делал и по горячим следам нашел виновника. big_smile

Остання редакція Krepton85 (2022-07-08 23:54:28)

Неактивний

#2 2022-11-07 17:21:09

cg_shura
Учасник
Зареєстрований: 2022-01-08
Повідомлень: 5

Re: Почему компилятор не проверяет индекс массива не в его диапазона?

Пользуйтесь статическим анализатором, они такое обнаруживают.

Неактивний

#3 2022-11-29 18:09:00

Roman1984
Учасник
Зареєстрований: 2017-02-17
Повідомлень: 66

Re: Почему компилятор не проверяет индекс массива не в его диапазона?

Все потому что массив это по сути указатель на адрес первого элемента и вы обращаетесь к адресу, в котором может содержаться все что угодно.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму