21.09.2014, 17:33 | |
21.09.2014, 17:33 | |
Ответы с готовыми решениями:
73
Вывести самые распространенные женские и мужские имена
Ошибки после компиляции на Visual Express 2012.Ошибки в теме |
Модератор
![]() ![]() 13730 / 10926 / 6482
Регистрация: 18.12.2011
Сообщений: 29,161
|
|||||||||||||||||||||
21.09.2014, 17:42 [ТС] | 2 | ||||||||||||||||||||
Неожиданное закрытие окна
Когда консольное приложение запускается непосредственно из среды программирования, то после выполнения последнего оператора программы ( return 0; ) окно закрывается. Вставляйте оператор, ожидающий ввода символа с клавиатуры перед return:
(на *NIX системах она не используется):
14
|
Модератор
![]() ![]() 13730 / 10926 / 6482
Регистрация: 18.12.2011
Сообщений: 29,161
|
|||||||||||||||||||||
21.09.2014, 17:56 [ТС] | 3 | ||||||||||||||||||||
Двойная перестановка строк или элементов массива
Рассмотрим на примере инвертирования строки
Последующие итерации до L-1 вернут буквы на прежние места. Исправленный вариант
при транспонировании матрицы и т.п. *** Updated: Дополнительные варианты переворота:
11
|
Супер-модератор
![]() ![]() ![]() |
||||||||||||||||||||||||||
21.09.2014, 18:12 | 4 | |||||||||||||||||||||||||
Попытка модифицировать константу через указатель
13
|
Модератор
![]() 8956 / 6722 / 921
Регистрация: 14.02.2011
Сообщений: 23,723
|
||||||||||||||||
21.09.2014, 18:33 | 5 | |||||||||||||||
Неправильное понятие приведения
Для приведения типов данных в C++ часто используются операции static_cast и reinterpret_cast .Операцию приведения static_cast<новый_тип>( выражение ) можно использовать только в тех случаях,когда компилятор выдает предупреждающее сообщение, например:
( d ) ставятся всегда! Если же выдается сообщение об ошибке, то нужно использовать операцию reinterpret_cast<новый_тип>( выражение ) .В этом случае только сам программист может вникнуть в суть преобразования и взять ответственность за преобразование на себя. Вот пример, требующий приведение такого типа:
typ1 и typ2 .К тому же и имена полей у них разные. Но внутренне устройство одинаковое. Т.е. мы понимаем, что типы данных абсолютно совместимы. Осталось доказать это компилятору, что мы и делаем с помощью явного преобразования
11
|
Модератор
![]() ![]() 13730 / 10926 / 6482
Регистрация: 18.12.2011
Сообщений: 29,161
|
||||||||||||||||
22.09.2014, 08:44 [ТС] | 6 | |||||||||||||||
Ошибки в логических выражениях
Использование присваивания (=) вместо сравнения (==).
Рекомендации: Читайте предупреждения компилятора, о таком присваивании он может сообщить (но не обязательно). Можно в операции сравнения поменять местами левую и правую часть, тогда возникнет ошибка компиляции (невозможно присвоить значение константе):
При их побитовом (поразрядном) умножении получим везде нули 00000000, что при приведении к bool даст false. Во втором случае каждая переменная сначала приводится к bool, в обоих случаях получается true, а потом выполняется логическое умножение. С Вашего позволения оставлю это (Условия Йоды, или нотация Йоды) здесь.
6
|
Почетный модератор
![]() ![]() ![]() 16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||
22.09.2014, 10:48 | 7 | ||||||||||
Использование символа цифры вместо числа
Например, такой код
Это все из-за того, что в таблице кодировки ASCII символу '9' соответствует код 57 и подставляется код этого символа. Чтобы избежать этого, т.е., именно получить число 9, а не код символа, необходимо вычесть код символа '0', который равен 48. Можно вычесть и код как есть, но понятнее будет вычесть символ '0'.
6
|
Форумчанин
![]() ![]() ![]() 8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
22.09.2014, 11:19 | 8 | ||||||||||
Выделение памяти без дальнейшего освобождения или неверное освобождение
а) При выделении памяти через оператор new - освобождайте её с помощью оператора delete в конце программы
б) Используйте для освобождения памяти, выделенной под массив, оператор delete [] , а под обычные переменные - delete .
в) Не стоит сочетать в программе, а тем более по отношению к одной и той же переменной/массиву, разные способы выделения/освобождения памяти. При выделении памяти с помощью malloc /calloc - освобождайте её с помощью функции free , при выделении через оператор new /new [] - освобождайте с помощью оператора delete /delete [] . Стоит отметить, что использование сишных способов работы с памятью в целом не одобряется.
7
|
Форумчанин
![]() ![]() ![]() 8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
22.09.2014, 20:29 | 9 | |||||
Возврат ссылки/указателя на локальную переменную
9
|
Форумчанин
![]() ![]() ![]() 8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||||||||||||
22.09.2014, 22:41 | 10 | |||||||||||||||
Использование неинициализированной переменной
Пожалуй, одна из самых распространённых ошибок. Компилятор о такой ошибке может выдать предупреждающее сообщение такого типа Проект -> Свойства -> Свойства конфигурации -> С/С++ -> Общие -> Уровень предупреждений Вариаций на эту тему много, приведу пару примеров:
Кликните здесь для просмотра всего текста
Да, статические и глобальные переменные таки инициализируются нулём по-умолчанию, но если вы это знаете, то наверняка и с проблемой выше не сталкивались
Также эта проблема кроется в частичной инициализации объектов.
4
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||||||||||
22.09.2014, 23:25 | 11 | |||||||||||||||
Лишняя точка с запятой
Такая же ошибка очень часто встречается в определении функций:
7
|
Модератор
![]() ![]() ![]() |
||||||||||||||||
23.09.2014, 08:04 | 12 | |||||||||||||||
Неверный тип возвращаемого значения функции main()
Для некоторых компиляторов (в том числе и Visual Studio) допускаются и другие возвращаемые типы. И вариант:
Однако, следует помнить, что он может восприниматься как ошибка другими компиляторами.
8
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
23.09.2014, 17:29 | 14 | ||||||||||
Сравнение вещественных чисел при вычислениях
Поскольку арифметические вычисления для чисел с плавающей запятой выполняются с некоторой погрешностью, то их сравнение на равенство будет некорректным, например:
8
|
Форумчанин
![]() ![]() ![]() 8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
24.09.2014, 00:01 | 15 | |||||
Сравнение символьных массивов
При сравнение char массивов через операторы < , == , != , > , <= , >= мы на самом деле сравниваем не содержимое, а указатели.Для правильного сравнения стоит использовать специальную функцию strcmp .
9
|
Почетный модератор
![]() ![]() ![]() 16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||||||||||||||||||
24.09.2014, 11:52 | 16 | |||||||||||||||||||||||||
Использование чисел, записанных в других системах счисления
Может показаться, что значения следующих двух переменных одинаковые:
123 ) записано в десятичной системе счисления. Т.к. по умолчанию (и чаще всего) мы работаем с десятичной системой счисления, то x так и будет равен 123 .Второе же число ( 0123 ) записано в восьмеричной системе счисления и при переводе в десятичную будет равно 83 , а не 123 . Если вы работаете с десятичной системой счисления, то не добавляйте цифру "0" перед числом.Проверка на принадлежность значения определенному интервалу Иногда при проверке принадлежности значения переменной определенному интервалу можно увидеть нечто подобное
x лежит между 0 и 10 .Если разбить на шаги, то они будут следующими: Т.к. оператор сравнения <= левоассоциативен (т.е., выполняется слева направо), то первым шагом будет сравнение 0 и x 1. 0 <= x . Результат сравнения - true или false , которые будут преобразованы в 1 или 0 соответственно.2. сравниваем полученный результат с 10 . 10 больше и 1 , и 0 . Следовательно, условие всегда истинно.В общем случае, можно сказать, что при сравнении подобным образом, если последнее число (в примере это число 10 ) больше или равно 1 , то условие всегда истинно.Проверку на принадлежность интервалу правильно записывать с помощью логического оператора И.
0 <= x никак не используется. Результатом будет значение выражения x <= 10 .Иногда вместо логического И используют логическое ИЛИ. Выражение
x лежит между 0 и 10 . Это может быть вообще любое число. Почему так происходит:1. Проверяем первое условие. Если x больше или равен нулю, то истина. Значит, любое положительное значение уже истина.2. Если первое условие не выполнилось, то проверяем второе условие. Любое отрицательное число (а предыдущее условие могло не пройти только отрицательное значение) меньше 10 , значит, условие тоже истинное.Следовательно, условие всегда истинное.
4
|
Почетный модератор
![]() ![]() ![]() 16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||||||||
24.09.2014, 12:11 | 17 | |||||||||||||||
Отсутствие возврата значения из функции
Например, следующая функция
Для избежания этого из функции обязательно должен быть возврат, вне зависимости от выполнения или невыполнения условия.
В Visual Studio это делается через команду меню: Проект -> Свойства -> Свойства конфигурации -> С/С++ -> Общие -> Уровень предупреждений -> Уровень 4 (/W4). Реальный пример - функция поиска позиции первого вхождения символа в строку.
3
|
Модератор
![]() ![]() 13730 / 10926 / 6482
Регистрация: 18.12.2011
Сообщений: 29,161
|
|||||||||||||||||||||||||||||||
24.09.2014, 12:32 [ТС] | 18 | ||||||||||||||||||||||||||||||
Оставление символа '\n' в потоке ввода:
cin.get() можно просто пропустить символы:
25
|
Модератор
![]() ![]() 13730 / 10926 / 6482
Регистрация: 18.12.2011
Сообщений: 29,161
|
||||||||||||||||
24.09.2014, 12:35 [ТС] | 19 | |||||||||||||||
Выход за пределы массива
Также часто встречается выход за пределы массива в строках в стиле C из-за отсутствии терминального нуля:
4
|
Модератор
![]() ![]() 13730 / 10926 / 6482
Регистрация: 18.12.2011
Сообщений: 29,161
|
||||||
24.09.2014, 12:38 [ТС] | 20 | |||||
![]() Решение
switch без break
i равном 0 будет выведено zero one other . При i равном 1 будет выведено one other . Т.е. без break происходит "проваливание" к следующей метке. В большинстве случаев, приведенный выше код является ошибочным, но иногда такое поведение может быть задуманным. И в этих случаях следует для очевидности указать в комментарии, что отсутствие break это не ошибка, а явная задумка автора.
2
|
24.09.2014, 12:38 | |
24.09.2014, 12:38 | |
Помогаю со студенческими работами здесь
20
Распространенные ошибки безопасность и распространенные ошибки безопасность и распространенные ошибки Распространенные ошибки SEO и ASP.NET 2.0 Самые распространенные строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
|
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
|
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
|
Использование контроллеров и middleware в Laravel PHP
Wired 18.02.2025
Современная веб-разработка требует четкой организации кода и эффективного управления потоком HTTP-запросов. Laravel, как один из ведущих PHP-фреймворков, предоставляет два мощных инструмента для. . .
|
Фильтрация массива по неточному соответствию элементам другого массива в JavaScript
Wired 18.02.2025
При работе с массивами данных в JavaScript иногда возникает задача поиска и фильтрации элементов по неточному соответствию. В отличие от точного сравнения, когда мы ищем полное совпадение значений,. . .
|
Создаем SPA Router на чистом JavaScript
bytestream 17.02.2025
В современной веб-разработке одностраничные приложения (SPA) стали стандартом для создания динамичных и отзывчивых пользовательских интерфейсов. Ключевым компонентом любого SPA является роутер -. . .
|
Машинное обучение на TypeScript и TensorFlow
bytestream 17.02.2025
Машинное обучение становится все более востребованным направлением в современной разработке программного обеспечения. Интеграция искусственного интеллекта в веб-приложения открывает новые возможности. . .
|
Как работать с данными EXIF и JPEG в JavaScript
bytestream 17.02.2025
В современном мире цифровой фотографии метаданные изображений играют важнейшую роль в организации и управлении медиаконтентом. Формат EXIF (Exchangeable Image File Format) - это стандарт,. . .
|
Как создать GUID/UUID в JavaScript
bytestream 17.02.2025
GUID (Globally Unique Identifier) и UUID (Universally Unique Identifier) - это специальные форматы 128-битных идентификаторов, которые практически гарантируют уникальность значения во времени и. . .
|
Что такое мышление в упрощенном смысле (моё субъективное видение, для создания модели).
Hrethgir 17.02.2025
Разумеется упрощать смысл есть. Дело в том, что я пришёл к тому выводу, что даже если я создам свой процессор (конвейер), то первое для чего смогу его использовать в качестве демонстративного. . .
|