Статьи / Типичные ошибки программирования

Типичные ошибки программирования


Отправить ссылку:

«Глупый учится на своих ошибках, а умный на чужих»
Народная мудрость

Типичные ошибки программирования

В этой статье хотелось бы поделиться опытом в программирование, а точнее в отладки, с теме кто не очень глубоко продвинулся в программирование, так как, те кто продвинулись, наверное, уже всё знают. Статья представляет список ошибок, из-за которых на отладку программы может уйти от 1 минуты до нескольких часов. Может быть, после прочтения стати, вы не будут совершать подобных ошибок.

Ошибка № 0. «Если что-то может сломаться - оно обязательно сломается»



Наверное, одно из самых главных правил!!!! Если вы видите узкое место в программе или место, в котором может возникнуть ошибка, то исправьте его немедленно!!! Потом забудете. Не стоит, надеется, что ошибка не возникнет или она не возможна.
У меня было куча таких примеров. Когда указатель никак не должен был быть равен NULL. Но всё же получалось, что он там был равен NULL из-за этого программа…(сами понимаете, что с ней происходило), в результате заказчик был не доволен, и мне пришлось потратить около часа на поиск этого места. Например, если вы знаете такой плеер, как VLC. В одном из его модулей встречается, такой комментарий (вольный перевод):
«Тут мы используем сортировку пузырьком, т.к. количество элементов не будет больше 20.»
Сейчас в версии 0.8.6 количество элементов в том массиве для сортировки около 100! Вот ведете, как могут быть не верны предположения.
Причём если ваш продукт захотят взломать не хорошие люди, то они сами могу моделировать такую ситуацию, при которой программа будет не правильно работать.

Ошибка № 1. «Всё делаю, но ничего не работает»



Ошибку можно охарактеризовать так: Вы что-то новое добавляете в программу, но ничего из этого не работает. Ну что тут сказать, часто это бывает, если вы изменяете не те файлы, или ваш проект не перекомпилирует эти файлы.
Как лечить: Если вы программируется под Visual Studio, то просто ставите brackpoint и запускаете программы. Если программа остановиться на нём то она перекомпилировалась. Ещё можно, в какую либо функцию, которая точно должна выполнятся вставить вывод информации в файл или на экран. Если выводится, то значит, всё перекомпилируется и ошибка не в этом.

Ошибка № 2. «Переполнение типа»



Бывают такие ситуации, когда смотришь всё логично, а всё равно ошибка, вот для примера код:

A = B + C;
char* G = new char[A];

Для тех, кто не знает C++, складываем 3 переменные и выделяем память для переменной G. Вдруг при выделении памяти ошибка возникает, хотя B и C положительные. Проблема в том, что B и C могут быть слишком большими числами, и при сложении получиться, типа переменной A переполнится и, следовательно, если не стоит защита от этого, переменная станет очень большим отрицательным числом.
Так что сумма 2 положительных чисел не всегда положительная.

* Данный пример может и не вызовет ошибки, я не тестировал его. Это только пример, что бы понять суть.

Ошибка № 3. «Всегда всё проверяй»



Если вы написали программу, и вот её начали тестировать. И вдруг нашли ошибку, то исправляйте её. И, предположим, исправили её, то необходимо после исправления проверить весь функционал программы, т.к. ваше исправление могло каким-то не известным для вас образом сломать какую-то другую функцию программы.
У меня была прохожая ситуация:
Я искал странную ошибку в программе, искал её с помощью лог-файла(файл куда программа писала какие-то данные). Ошибку нашёл, исправил, а вот всё не проверил. И выложил программу в Интернет. На следующий день мне пришло письмо. Писали, что программа не работает. Оказалось, что я забыл удалить запись в лог файл. Значит у пользователя, этого файла не было на компьютере, и соответственно была ошибка «Файл не найден». Вообще есть так называемые UnitTest-ы которые могут автоматизировать эту работу.


При полном или частичном копировании необходимо указывать ссылку на данную статью.


Олег (Дата )

Все вопросы и предложения высылайте на адрес soft_support@list.ru. Необходимо в заголовке указать название статьи.

Оставь свой отзыв


Ответьте на вопрос (ответ маленькими буквами)* :
Месяц после марта