п.с. вообще delay не люблю, из за них вечно косит данные, если несколько процессов(у меня несколько датчиков температуры). в этом случае получается ±1 измерение. я поставил delay(100) и 1 секунду, чтобы уменьшить цикл для наглядности, получается что должно быть 10 замеров, начинаем с нулевой позиции, поэтому на порядковом номере 9 заканчиваем, вот что иногда выскакивает:
7|5.12
8|5.12
9|5.12
10|0.50
№10 не должно быть по идее.
ну это так… поговорить, я сам поправлю. спасибо. буду дальше анализировать
И что, по вашему, должно произойти, если вы запросили элемент 10 ? Контроллер взорваться должен?
С/С++ - это язык, который ничего не запрещает программисту. Хотите читать элементы массива за его границей - читайте.
Язык считает, что вы понимаете, что делаете.
А если не понимаете и получается хрень - то никто не виноват , кроме вас
вопрос был в верности моего убеждения: “ведь объявляя с равенством “={}” по-моему объявляем с нулевыми значениями? или я ошибаюсь”, в следующем после Вашего поста ответе мне указали что это не верно.
Ваше убеждение верно: все элементы статического массива обнуляются.
Ваша ошибка в том, что Вы не пытаетесь оценить количество обнуляемых элементов. В предложенном Вами варианте обнуляется ровно ноль значений. То есть ни одного. То есть никакие значения не обнуляются.
Да. Это довольно распространённый приём программирования, когда в хвост структуры ставится массив нулевой (единичной, если хотите соблюдать стандарт) а при запросе памяти под структуру (когда уже известно, сколько нужно элементов) запрашивается “сколько надо”. В итоге имеем “честный массив”, которым пользуемся как массивом безо всяких ограничений (выход за границы массива ни в С, ни в С++ не проверяется).
Я как-то готовил пример для своей рубрики, но не доделал, сейчас, если найду, доделаю и выложу.
P.S. Нашёл и вспомнил почему тогда забросил. Хоть сколько-нибудь осмысленный пример простым не получается, а объёмный пример – как-то не особо уместно. Опять забросил
Тогда ответ на вопрос ТС - потому что читается случайная память, расположенная за полученным указателем и перед использованием массива нужно выделять память под необходимое количество данных? А если память уже выделялась под что то до использования массива, то использование этого указателя затрёт данные. Т.е. получать указатель в начале программы может привести к краху памяти в процессе выполнения?
это точно? я не особо разбираюсь, но это как то странно, интуитивно хочется думать что “размеченная ранее” память не может быть занята другими данными, думал что в худшем случае можно попасть на случайные данные которые уже не используются, где они берутся правда эти случайные данные пока не готов предполагать.
он показывает что это все таки не обязательно, и нет никаких пределов, как и правильно и нет))) но это не точно!
но для вашей задачи он наверное не подойдет…