Мы уже рассматривали циклы, когда обсуждали функцию binary_search(). Большинство ошибок возникает в конце циклов.
• Правильно ли проинициализированы переменные в начале цикла?
• Правильно ли заканчивается цикл (часто на последнем элементе)?
Приведем пример, который содержит ошибку.
int do_loop(const vector& v) // плохая функция // неправильный цикл
{
int i; int sum;
while(i<=vec.size()) sum+=v[i]; return sum;
}
Также вам может показаться, что такая тема как http://decor-okna.com/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт decor-okna.com
Тема шторы рулонные на пластиковые окна там представлена весьма широко.
Здесь содержатся три очевидные ошибки. (Какие именно?) Кроме того, хороший тестировщик немедленно выявит возможности для переполнения при добавлении чисел к переменной sum.
Многие циклы связаны с данными и могут вызвать переполнение при вводе больших чисел.
Широко известная и особенно опасная ошибка, связанная с циклами и заключающаяся в переполнении буфера, относится к категории ошибок, которые можно перехватить, систематически задавая два ключевых вопроса о циклах.
char buf[MAX]; // буфер фиксированного объема
char* read_line() // опасная функция {
int i = 0; char ch;
while(cin.get(ch) && ch!='\n') buf[i++] = ch; buf[i+1] = 0; return buf;
}
Разумеется, вы не написали бы ничего подобного! (А почему нет? Что плохого в функции read_line() ?) Однако эта ошибка, к сожалению, является довольно распространенной и имеет разные варианты.
// опасный фрагмент
gets(buf); // считываем строку в переменную buf
scanf("%s",buf); // считываем строку в переменную buf
Iwl Поищите описание функций gets() и scanf() в своей документации и избегайте их как чумы.
Под словом “опасная” мы понимаем, что переполнение буфера является инструментом для взлома компьютеров. В настоящее время реализации выдают предупреждение об опасности использования функции gets() и ее аналогов.
Опубликовал katy
April 26 2015 14:05:43 ·
0 Комментариев ·
3303 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.