| 21.09.2014, 17:33 | |
|
Ответы с готовыми решениями:
73
Вывести самые распространенные женские и мужские имена
Ошибки после компиляции на Visual Express 2012.Ошибки в теме |
|
Модератор
13776 / 10969 / 6491
Регистрация: 18.12.2011
Сообщений: 29,251
|
|||||||||||||||||||||
| 21.09.2014, 17:42 [ТС] | |||||||||||||||||||||
|
Неожиданное закрытие окна
Когда консольное приложение запускается непосредственно из среды программирования, то после выполнения последнего оператора программы ( return 0; ) окно закрывается. Вставляйте оператор, ожидающий ввода символа с клавиатуры перед return:
(на *NIX системах она не используется):
14
|
|||||||||||||||||||||
|
Модератор
13776 / 10969 / 6491
Регистрация: 18.12.2011
Сообщений: 29,251
|
|||||||||||||||||||||
| 21.09.2014, 17:56 [ТС] | |||||||||||||||||||||
|
Двойная перестановка строк или элементов массива
Рассмотрим на примере инвертирования строки
Последующие итерации до L-1 вернут буквы на прежние места. Исправленный вариант
при транспонировании матрицы и т.п. *** Updated: Дополнительные варианты переворота:
11
|
|||||||||||||||||||||
|
Супер-модератор
|
||||||||||||||||||||||||||
| 21.09.2014, 18:12 | ||||||||||||||||||||||||||
|
Попытка модифицировать константу через указатель
13
|
||||||||||||||||||||||||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||||||||||||
| 21.09.2014, 18:33 | ||||||||||||||||
|
Неправильное понятие приведения
Для приведения типов данных в C++ часто используются операции static_cast и reinterpret_cast.Операцию приведения static_cast<новый_тип>( выражение ) можно использовать только в тех случаях,когда компилятор выдает предупреждающее сообщение, например:
( d ) ставятся всегда! Если же выдается сообщение об ошибке, то нужно использовать операцию reinterpret_cast<новый_тип>( выражение ).В этом случае только сам программист может вникнуть в суть преобразования и взять ответственность за преобразование на себя. Вот пример, требующий приведение такого типа:
typ1 и typ2.К тому же и имена полей у них разные. Но внутренне устройство одинаковое. Т.е. мы понимаем, что типы данных абсолютно совместимы. Осталось доказать это компилятору, что мы и делаем с помощью явного преобразования
11
|
||||||||||||||||
|
Модератор
13776 / 10969 / 6491
Регистрация: 18.12.2011
Сообщений: 29,251
|
||||||||||||||||
| 22.09.2014, 08:44 [ТС] | ||||||||||||||||
|
Ошибки в логических выражениях
Использование присваивания (=) вместо сравнения (==).
Рекомендации: Читайте предупреждения компилятора, о таком присваивании он может сообщить (но не обязательно). Можно в операции сравнения поменять местами левую и правую часть, тогда возникнет ошибка компиляции (невозможно присвоить значение константе):
При их побитовом (поразрядном) умножении получим везде нули 00000000, что при приведении к bool даст false. Во втором случае каждая переменная сначала приводится к bool, в обоих случаях получается true, а потом выполняется логическое умножение. С Вашего позволения оставлю это (Условия Йоды, или нотация Йоды) здесь.
6
|
||||||||||||||||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||
| 22.09.2014, 10:48 | |||||||||||
|
Использование символа цифры вместо числа
Например, такой код
Это все из-за того, что в таблице кодировки ASCII символу '9' соответствует код 57 и подставляется код этого символа. Чтобы избежать этого, т.е., именно получить число 9, а не код символа, необходимо вычесть код символа '0', который равен 48. Можно вычесть и код как есть, но понятнее будет вычесть символ '0'.
6
|
|||||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
| 22.09.2014, 11:19 | |||||||||||
|
Выделение памяти без дальнейшего освобождения или неверное освобождение
а) При выделении памяти через оператор new - освобождайте её с помощью оператора delete в конце программы
б) Используйте для освобождения памяти, выделенной под массив, оператор delete [], а под обычные переменные - delete.
в) Не стоит сочетать в программе, а тем более по отношению к одной и той же переменной/массиву, разные способы выделения/освобождения памяти. При выделении памяти с помощью malloc/calloc - освобождайте её с помощью функции free, при выделении через оператор new/new [] - освобождайте с помощью оператора delete/delete []. Стоит отметить, что использование сишных способов работы с памятью в целом не одобряется.
7
|
|||||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
| 22.09.2014, 20:29 | ||||||
|
Возврат ссылки/указателя на локальную переменную
9
|
||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||||||||
| 22.09.2014, 22:41 | |||||||||||||||||
|
Использование неинициализированной переменной
Пожалуй, одна из самых распространённых ошибок. Компилятор о такой ошибке может выдать предупреждающее сообщение такого типа
Проект -> Свойства -> Свойства конфигурации -> С/С++ -> Общие -> Уровень предупреждений Вариаций на эту тему много, приведу пару примеров:
Кликните здесь для просмотра всего текста
Да, статические и глобальные переменные таки инициализируются нулём по-умолчанию, но если вы это знаете, то наверняка и с проблемой выше не сталкивались
Также эта проблема кроется в частичной инициализации объектов.
4
|
|||||||||||||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||||||||||
| 22.09.2014, 23:25 | ||||||||||||||||
|
Лишняя точка с запятой
Такая же ошибка очень часто встречается в определении функций:
7
|
||||||||||||||||
|
Модератор
|
||||||||||||||||
| 23.09.2014, 08:04 | ||||||||||||||||
|
Неверный тип возвращаемого значения функции main()
Для некоторых компиляторов (в том числе и Visual Studio) допускаются и другие возвращаемые типы. И вариант:
Однако, следует помнить, что он может восприниматься как ошибка другими компиляторами.
8
|
||||||||||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||
| 23.09.2014, 09:18 | |||||||
|
Отсутствие точки с запятой после определения классового типа
4
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
| 23.09.2014, 17:29 | |||||||||||
|
Сравнение вещественных чисел при вычислениях
Поскольку арифметические вычисления для чисел с плавающей запятой выполняются с некоторой погрешностью, то их сравнение на равенство будет некорректным, например:
8
|
|||||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
| 24.09.2014, 00:01 | ||||||
|
Сравнение символьных массивов
При сравнение char массивов через операторы <, ==, !=, >, <=, >= мы на самом деле сравниваем не содержимое, а указатели.Для правильного сравнения стоит использовать специальную функцию strcmp.
9
|
||||||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||||||||||||||||||
| 24.09.2014, 11:52 | ||||||||||||||||||||||||||
|
Использование чисел, записанных в других системах счисления
Может показаться, что значения следующих двух переменных одинаковые:
123) записано в десятичной системе счисления. Т.к. по умолчанию (и чаще всего) мы работаем с десятичной системой счисления, то x так и будет равен 123.Второе же число ( 0123) записано в восьмеричной системе счисления и при переводе в десятичную будет равно 83, а не 123. Если вы работаете с десятичной системой счисления, то не добавляйте цифру "0" перед числом.Проверка на принадлежность значения определенному интервалу Иногда при проверке принадлежности значения переменной определенному интервалу можно увидеть нечто подобное
x лежит между 0 и 10.Если разбить на шаги, то они будут следующими: Т.к. оператор сравнения <= левоассоциативен (т.е., выполняется слева направо), то первым шагом будет сравнение 0 и x1. 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 | |||||||||||||||||
|
Отсутствие возврата значения из функции
Например, следующая функция
Для избежания этого из функции обязательно должен быть возврат, вне зависимости от выполнения или невыполнения условия.
В Visual Studio это делается через команду меню: Проект -> Свойства -> Свойства конфигурации -> С/С++ -> Общие -> Уровень предупреждений -> Уровень 4 (/W4). Реальный пример - функция поиска позиции первого вхождения символа в строку.
3
|
|||||||||||||||||
|
Модератор
13776 / 10969 / 6491
Регистрация: 18.12.2011
Сообщений: 29,251
|
|||||||||||||||||||||||||||||||
| 24.09.2014, 12:32 [ТС] | |||||||||||||||||||||||||||||||
|
Оставление символа '\n' в потоке ввода:
cin.get() можно просто пропустить символы:
25
|
|||||||||||||||||||||||||||||||
|
Модератор
13776 / 10969 / 6491
Регистрация: 18.12.2011
Сообщений: 29,251
|
||||||||||||||||
| 24.09.2014, 12:35 [ТС] | ||||||||||||||||
|
Выход за пределы массива
Также часто встречается выход за пределы массива в строках в стиле C из-за отсутствии терминального нуля:
4
|
||||||||||||||||
|
Модератор
13776 / 10969 / 6491
Регистрация: 18.12.2011
Сообщений: 29,251
|
||||||
| 24.09.2014, 12:38 [ТС] | ||||||
Сообщение было отмечено Volga_ как решение
Решение
switch без break
i равном 0 будет выведено zero one other. При i равном 1 будет выведено one other. Т.е. без break происходит "проваливание" к следующей метке. В большинстве случаев, приведенный выше код является ошибочным, но иногда такое поведение может быть задуманным. И в этих случаях следует для очевидности указать в комментарии, что отсутствие break это не ошибка, а явная задумка автора.
2
|
||||||
| 24.09.2014, 12:38 | |
|
Помогаю со студенческими работами здесь
20
Распространенные ошибки безопасность и распространенные ошибки безопасность и распространенные ошибки Распространенные ошибки SEO и ASP.NET 2.0 Самые распространенные строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|