Форум программистов, компьютерный форум, киберфорум
Наши страницы
Arduino
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
SergeyKagen
0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 114
1

Непонятный глюк массива

18.06.2019, 11:33. Просмотров 1612. Ответов 8
Метки нет (Все метки)

Объявляю массив.

C++
1
2
3
4
5
6
7
8
9
10
11
12
int adcPlus[77];
int adcMinus[77];
 
void setup()
{
GLCD.Init();
GLCD.ClearScreen();
GLCD.SelectFont(System5x7);
 
for(unsigned char counter = 0; counter < 78; counter++) { 
  adcPlus[counter] = 0; adcMinus[counter] = 0; }
}
Но почему-то вместо adcMinus[77] = 0; он записывает adcMinus[] = -22373

но странность заключается в другом.

при добавлении строчки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int adcPlus[77];
int adcMinus[77];
 
void setup()
{
GLCD.Init();
GLCD.ClearScreen();
GLCD.SelectFont(System5x7);
 
for(unsigned char counter = 0; counter < 78; counter++) { 
 
Serial.print ("pack"); Serial.print (counter); Serial.print (" "); Serial.print (adcPlus[counter]); Serial.print (" "); Serial.println (adcMinus[counter]); 
 
  adcPlus[counter] = 0; adcMinus[counter] = 0; }
}
вижу что счёт в цикле доходит до 73 и на этом всё, цикл повторяется заново и не выходит из цикла, так как не досчитывает до 77.

Добавлено через 35 минут
ошибка при компиляции

warning: iteration 77 invokes undefined behavior [-Waggressive-loop-optimizations]

Добавлено через 55 минут
Такая форма записи ошибку не выдаёт

C++
1
2
3
4
5
for(unsigned char p=0; p<78; p++){
    GLCD.DrawLine(p+2, 2, p+2, 30, 0);
    GLCD.DrawLine(p+2, 16, p+2, 16+adcPlus[77]);
    GLCD.DrawLine(p+2, 16, p+2, 16-adcMinus[77]);
    }
а вот такая форма записи, выкидывает ошибку.
warning: iteration 77 invokes undefined behavior [-Waggressive-loop-optimizations]

C++
1
2
3
4
5
for(unsigned char p=0; p<78; p++){
    GLCD.DrawLine(p+2, 2, p+2, 30, 0);
    GLCD.DrawLine(p+2, 16, p+2, 16+adcPlus[p]);
    GLCD.DrawLine(p+2, 16, p+2, 16-adcMinus[p]);
    }
в чем ошибка?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2019, 11:33
Ответы с готовыми решениями:

Непонятный глюк с АЦП на PinBoard II
Сразу поясню: опыт работы с МК Атмел некоторый имею, но небольшой (за душой пока один серьёзный...

Глюк или не глюк в Siglent SDS 1192CML..?
Всем привет! У меня тоже имеется Siglent SDS 1192CML, пора создавать клуб любителей ентого девайса...

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

Непонятный глюк !
Доброго времени суток уважаемые форумчане! Написал панель инструментов для IE с использованием...

Непонятный глюк
Собрался реализовать простенькую програмку на qt и получил такое, хз может кто сталкивался. ...

8
ValeryS
Модератор
7777 / 5781 / 753
Регистрация: 14.02.2011
Сообщений: 19,785
Завершенные тесты: 1
18.06.2019, 11:59 2
Цитата Сообщение от SergeyKagen Посмотреть сообщение
for(unsigned char counter = 0; counter < 78; counter++)
к скольким элементам массива здесь идет обращение?
0
SergeyKagen
0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 114
18.06.2019, 12:01  [ТС] 3
Цитата Сообщение от ValeryS Посмотреть сообщение
к скольким элементам массива здесь идет обращение?
от 0 до 77

C++
1
int adcPlus[77];
0
ValeryS
Модератор
7777 / 5781 / 753
Регистрация: 14.02.2011
Сообщений: 19,785
Завершенные тесты: 1
18.06.2019, 12:03 4
Цитата Сообщение от SergeyKagen Посмотреть сообщение
от 0 до 77
и сколько это?
0
18.06.2019, 12:03
SergeyKagen
0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 114
18.06.2019, 12:08  [ТС] 5
Цитата Сообщение от ValeryS Посмотреть сообщение
и сколько это?
- это в общем 78

цикл перебирает от 0 до 77, условие же x<78
0
ValeryS
Модератор
7777 / 5781 / 753
Регистрация: 14.02.2011
Сообщений: 19,785
Завершенные тесты: 1
18.06.2019, 12:12 6
Лучший ответ Сообщение было отмечено SergeyKagen как решение

Решение

Цитата Сообщение от SergeyKagen Посмотреть сообщение
это в общем 78
правильно а массив объявлен на 77 элементов[0...76], на лицо классический выход за пределы массива, со всеми вытекающими глюками
о чем компилятор честно предупреждал
Цитата Сообщение от SergeyKagen Посмотреть сообщение
warning: iteration 77 invokes undefined behavior [-Waggressive-loop-optimizations]
предупреждение: итерация 77 вызывает неопределенное поведение [-Waggressive-loop-optimizations]
1
SergeyKagen
0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 114
18.06.2019, 12:15  [ТС] 7
Цитата Сообщение от ValeryS Посмотреть сообщение
правильно а массив объявлен на 77 элементов[0...76]
мда... спасибо огромное... Теперь всё понятно почему он так себя вёл)))
0
ValeryS
Модератор
7777 / 5781 / 753
Регистрация: 14.02.2011
Сообщений: 19,785
Завершенные тесты: 1
18.06.2019, 13:20 8
SergeyKagen, бывает
иногда свою ошибку в упор не видишь, а со стороны она ясна видна
вот для этого форум и существует
1
SergeyKagen
0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 114
18.06.2019, 16:16  [ТС] 9
это точно)
0
18.06.2019, 16:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2019, 16:16

Непонятный глюк C#
Объясните пожалуйста, почему в результате выполнения нижеприведенного кода в комбобоксе Dlin в...

Непонятный глюк.
Какой-то непонятный глюк образовался, никак побороть не могу :blink: В общем есть форма, в ней было...

Непонятный глюк с буквой И
При записи в таблицу(записываю текст) вместо буквы И(именно заглавной) отображаются(при выводе) два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru