ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
826718 Топик полностью
Николай Коровин (24.03.2018 12:05 - 12:28, просмотров: 131) ответил fk0 на Баг первый -- "magic numbers в коде!", его даже ловить не надо, сразу наверняка падает. Баг второй -- мусор ловится valgrind или address sanitizer. Баг третий по-моему должен давать варнинг в компиляторе (ub).
Не-а. Третий -- implementation-defined и снабжён комментариями, достаточно заметными, чтобы любой, портирующий мой код не жопой, увидел и соотнёс со своим компилёром (хотя портировать его никто не собирается, просто, от греха). Второй забьётся диким количеством ворнингов о тех участках, которые мы, собственно, заполнять и не должны. А если и должны, то мы же их заполним memset(0,всё) и потом поверх этого прочитаем данные, и тогда он не обнаружит и настоящую ошибку тоже. Случай ещё был. unsigned short LoopIndex1, LoopIndex2; double LoopBuffer[65536]; и дальше что-то типа LoopBuffer[LoopIndex++]=Incoming, а LoopIndex2 иногда пробегает некий участок от LoopIndex1 на какое-то расстояние. И вдруг это всё начало падать. Прелесть ситуации в том, что косяк впорол некий идиёт, и он же, прошерстив анализатором, поднял визг, что всё падает из-за того, что у меня индекс не инициализирован. Естественно, при этом у себя косяк он искать прекратил :) и до того, как я его потыкал в глубину его заблуждения, поиск не возобновлял. Это, кстати, вообще больной вопрос. Никто никогда не удосуживается проверить, должна ли данная конкретная ошибка приводить не просто к косякам, а именно к таким, которые мы наблюдаем. По своему опыту, такая проверка часто ещё два-три смежных косореза вылавливает, зачастую очччень даже скрытных. П -- Паранойя.