Работа с памятью
- Войдите на сайт для отправки комментариев
Ср, 09/10/2019 - 21:46
Всем привет, впервые пытаюсь работать с памятью. Получается относительно успешно.
Имею следующий код(не весь):
void loop { if((!digitalRead(a)) && millis() - *count > 180000 && count){ ... // какой-то код } if(moveDetectore.digitalRead(a)){ if(count)delete count; ... // какой-то код } } // функция прерывание void setOffTimer(void){ if(!count) { count = new uint64_t; *count = millis(); } else { *count = millis(); } }
В определенный момент плата зависает уверен что проблема в этой части кода.
На 146% прав.
В определенный момент плата зависает уверен что проблема в этой части кода.
может в этой, а может и в той. Ту мы не видели, может она хуже :)
Еще один шпиён 008 )))
Там только решение пропорций,работа с аналоговым входам и выходами, короче вода всякая.
Там только решение пропорций,работа с аналоговым входам и выходами, короче вода всякая.
Уважаемый, не переживайте, никого не интересуют ваши пропорции, можете их из кода выкинуть. Но код должен быть полный - то есть такой, который без изменений компилировался бы стандартным компилятором - и при этом демонстрировал ошибку.
Важно видеть, как и когда вы описываете переменные, как выделяете и освобождаете память, да и многое другое. Вы - по определению - не можете знать, что является значимым для поиска ошибки в коде, а что нет, потому как если бы вы это знали - решили бы проблему сами.
Если не хотите показывать код - продолжать нет смысла.
Утечка памяти. Очень хорошо вы с памятью работаете. Переходите на лодки. Открытие кингстонов очень хорошо учит плаванью в воде.
Тогда ответе на такой вопрос почему условие
срабатывает только 1 раз.
А условие
за 15 минут работы программы срабатывает 12к раз.
То есть память выделилась 1 раз а удаление ее происходит 12к раз.
потому что очищение динамической переменной не приравнивает указатель нулю
что это за миллис такой у вас - 64 битный? Что за контроллер?
1 часть кода основная программа:
2 часть
Arduino UNO R3
Arduino UNO R3
в Уно миллис имеет тип uint32_t
А можно узнать, в чем смысл этого "прыжка через голову" - выделения динамической переменной в прерывании? Чего вы хотите добиться-то? Почему не завести глобал вместо постоянных выделений и стираний жалких 8 байт?
Думаю, что это даже близко не работает так, как вы думали.
А можно узнать, в чем смысл этого "прыжка через голову" ?
А эта оне образованность свою показать хочут! ;))))
насчет не_обнуления указателя при delete я там выше, похоже, фигню сморозил. Хотя проверять указатель таким образом на NULL не рекомендуется, в данном случае проблема в другом.
Все в прерывании сделано неверно