Форум программистов, компьютерный форум, киберфорум
Наши страницы
Шутки юмора
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/157: Рейтинг темы: голосов - 157, средняя оценка - 4.95
darkAngel
Технофашист
219 / 202 / 11
Регистрация: 11.03.2009
Сообщений: 883
1

Глупые ошибки и опечатки в коде

11.02.2010, 22:41. Просмотров 28562. Ответов 152
Метки нет (Все метки)

Может и была подобная тема, но всё таки.

Как известно, процесс отладки процесс более сложный, чем первоначальное написание кода. И иногда он просто выносит мозг.
Дак вот, предлагаю здесь писать о глупых ошибках, которые были допущены Вами и затягивали процесс отладки на долгие часы.


=====================================
Начну.
Сегодня часа 4 отлаживал прогу, чуть на стену не лез.
В общем, копирую рабочий код из консолки на Си в визуальную среду, всё правильно копирую - ctrl+c ctrl+v, все библиотеки подключаю. И не работает. КОпирую назда в консольку - сразу работает. Дошло до того, что в ручную заного всю прогу переписал. Проверял каждую строчку. Ну всё верно - и не работает. Магия прям.
Оказалось, проблема в указателях. В консолке почемуто не инициализированные указателя по умолчанию равны 0, а в виз. среде равны числу. Хотя компилятор один и тот же. Вот так, 5 часов потратил на эту глупость.
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2010, 22:41
Ответы с готовыми решениями:

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного...

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include <iostream> using namespace std; ...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не...

Ошибки при компиляции - исправить ошибки в коде
Помогите исправить ошибки , не понимаю в чем может быть причина ... ...

ошибки в готовом коде(ошибки указаны)
Ввести с клавиатуры строку (кол-во символов не больше 10). И определить ее...

152
Evg
Эксперт CАвтор FAQ
19358 / 7207 / 538
Регистрация: 30.03.2009
Сообщений: 20,151
Записей в блоге: 30
08.08.2010, 13:39 21
Цитата Сообщение от Rockedit Посмотреть сообщение
Причем заметим, что если функции delay и sleep, смотря какой язык мы используем, как то примерно выдерживают задаваемое врямя задержки, то данная конструкция уж очень зависит от железа, на тех компах что у нас в институте задержка далеко не в микросекундах измеряется)))
А какая разница? Человек работает на конкретном железе и конкретном компиляторе. Его не особо заботит, что на другом компе задержка будет совсем другая. Люди скорее всего ещё советской школы, когда аппаратная часть компутеров годами оставалась неизменной. В программах тех времён сплошь и рядом можно найти подобные коды
0
turboq
156 / 156 / 12
Регистрация: 14.01.2010
Сообщений: 1,449
08.08.2010, 14:35 22
Минут сорок пытался отловить сообщение на выключения винды(код перенес из другой проги), но не получалось та прога работает а эта нет. Только потом случайно увидел что не прописал сообщение в методе класса, перекопировал код не полностью, а он в самом верху получился а я искал ошибку ниже implementation.
0
Юрий АЛексеевич
64 / 41 / 6
Регистрация: 10.08.2010
Сообщений: 120
17.08.2010, 10:00 23
Цитата Сообщение от Evg Посмотреть сообщение
А какая разница? Человек работает на конкретном железе и конкретном компиляторе. Его не особо заботит, что на другом компе задержка будет совсем другая. Люди скорее всего ещё советской школы, когда аппаратная часть компутеров годами оставалась неизменной. В программах тех времён сплошь и рядом можно найти подобные коды
Ну почуму, чуть что так сразу советской? В далекие времена многие, даже серьезные конторы страдали подобным кодом. Вспомните старые игрушки и кнопочку "турбо", которой регулировалась скорость. Ну или попробовать некоторые старенькие игрушки запустить на чём нибудь беме современном. На вскидку - Wings Commander.

З.Ы. Почему то всегда смешит, когда не переключив раскладку - набираешь if...
0
Rockedit
Автор FAQ
Автор FAQ
1770 / 579 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
17.08.2010, 10:27 24
Читал когда то на bash.org.ru:
ShuRik: хз зачем так рано утром ставить лабы
ShuRik: прога на си не компилица =(
ShuRik: смотрю код - на месте if написал else.
ShuRik: где логика?! надо больше спать...
ShuRik: потом успокоился, логику своих мыслей увидел - написано не else а esle)
Добавлено через 17 минут
Не очень конечно верится. Компилятор бы сразу написал, но с утра впринципи может быть все что угодно.
0
Xander Bass
Йошь-мыслитель
121 / 115 / 25
Регистрация: 22.02.2009
Сообщений: 677
Записей в блоге: 5
30.08.2010, 13:46 25
К слову о невнимательности. Итак задачка: перебором найти в наборе данных нужную строку и вернуть в итоговый результате элемент набора данных. Используем код (в Дельфях):

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function FUNC(XD: TXMLDocument; L: ShortString): IXMLNode;
var
  c: integer;
  ln: IXMLNode;
  s: ShortString;
begin
  c:=0;
  while c <> XD.DocumentElement.ChildNodes.Count-1 do
  begin
    if VarToStr(XD.DocumentElement.ChildNodes[c].Attributes['id']) = L then
    begin
      ln:=XD.DocumentElement.ChildNodes[c];
      c:=XD.DocumentElement.ChildNodes.Count-1
    end else
    begin
      c:=c+1; {DEBUG(VarToStr(XD.DocumentElement.ChildNodes[c].Attributes['id'],L) } 
    end
  end;
  result:=ln
end;
По невнимательности своей я допустил в алгоритме ошибку и функция работала несколько некорректно. Перед Вами её изначальный вариант, до исправления. Если вкратце, то баг заключался в том, что функция не читала последний элемент XML-документа. Называется, нефиг было мудрить с алгоритмом. По сути там надо убрать из двух мест "-1". Но пока я докапывался до сути ошибки, я написал тестовую функцию, сравнивающую две строки и выводящую результат сравнения в окно сообщения. Назовём её DEBUG. И... Началось непонятное. Функция выдавала сообщение, значит результаты, как видно по алгоритму, не равны, но она выдавала РАВЕНСТВО! Мозг взрывается, ломаются представления о математике и рациональности вообще!

Впрочем, всё оказалось иллюстрацией поговорки "А слона-то я и не приметил". Если приглядеться к алгоритму, то можно заметить, что счётчик управляет порядковым номером элемента документа. А сравнение двух строк в отладочной функции происходило ПОСЛЕ увеличения счётчика на 1. Следовательно функция сравнения читала уже следующий элемент документа. А он-то как раз и был равен нужному значению. Вот функция и выдавала честно, что эти-то строки как раз равны. Переставил местами функцию и счётчик - всё встало на свои места.
0
Fedis
609 / 89 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
17.09.2010, 20:58 26
Полчаса бился над программой. Пока не увидел:
C++
1
scanf("%d", &a, &b);
0
taras atavin
4205 / 1768 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
11.10.2010, 11:54 27
i.csproj, а в чём глюк?
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
12.10.2010, 10:56 28
Динамический массив.
0
romchiksoad
1951 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,067
Записей в блоге: 2
25.10.2010, 00:29 29
Вот таким запросом вытаскиваю из БД данные:
SELECT `table`.* FROM `table` WHERE `table`.`id` = $id LIMIT 1
Далее нужно их вернуть, как результат работы функции:
while ( $resalt = mysql_fetch_assoc ( $query ) ) {

return array ( $resalt['...'], ... );
...
Пора спать, наверно...
0
nio
5959 / 3365 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
04.11.2010, 14:38 30
Не совсем в коде ошибка, но... Как-то раз делал дома сетку и решил назвать по-простому "Моя сеть", только на английском и в одно слово. Получилось "mynet"
ЗЫ: сеть так и не заработала...
0
Alligieri
CEO
Эксперт С++
2253 / 1243 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
04.11.2010, 19:11 31
nio, ага я недавно тоже мучился 2 часа - решил перенастроить дома сетку перестала работать, на другой день с утра встаю - и как осенило "пойду ка я гляну какие там маки у сетевых" - оказалось одинаковые (я менял для неких манипуляций пару дней перед этим и забыл)
0
taras atavin
4205 / 1768 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
05.11.2010, 16:17 32
Alligieri, это как надо умудриться в одну сеть воткнуть одинаковые аппаратные адреса?
0
Alligieri
CEO
Эксперт С++
2253 / 1243 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
06.11.2010, 02:20 33
taras atavin, ну они иногда не в одной сети бывают вот тогда и приходится МАС менять
0
darkAngel
Технофашист
219 / 202 / 11
Регистрация: 11.03.2009
Сообщений: 883
14.12.2010, 17:57  [ТС] 34
не совсем опечатка, но вот сёдня как мучился с интернетом:
аська и почта работает, а страницы не грузятся. Звоню в техподдержку. Со мной там мучились, даже какойто глюк вроде бы нашли с ссесиями с моего модема.. И не пашет. Я и браузер переустановил, фаервол весь облазил.. настройки модема все переделал, и не работает...
4 часа мучался...
Оказалось, что была включена переадресация на прокси в настройках браузера, а прокси висел
0
Alligieri
CEO
Эксперт С++
2253 / 1243 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.12.2010, 22:08 35
Цитата Сообщение от darkAngel Посмотреть сообщение
Оказалось, что была включена переадресация на прокси в настройках браузера, а прокси висел
бывает не так и легко найти кстати. я недавно конкретно лоханулся с LINQ, но рассказывать не буду ибо стыдно очень
0
Evg
Эксперт CАвтор FAQ
19358 / 7207 / 538
Регистрация: 30.03.2009
Сообщений: 20,151
Записей в блоге: 30
14.12.2010, 22:58 36
С одной стороны сие опечаткой не является, с другой стороны такой код можно считать недоразумением и засчитать за большую опечатку.

Сейчас вошло в моду вместо "if (x == 5)" писать "if (5 == x)". Типа того, что если вдруг ошибёшься и вместо "==" напишешь "=", то компилятор выдаст ошибку. Однажды у нас работал один товарищ. Вроде бы серьёзный человек, кандидат наук. Но сел на эту заразу. И, будучи кандидатом наук, решил, что во всём надо быть последовательным и для других типов сравнений тоже писать таким вот образом: "if (5 != x)", "if (5 > x)" и т.д. Что привело к маразмам (потому что такой код нельзя читать без поллитры) типа "if (0 <= a) && (10 >= a)". Маразм превратился в полный маразм, когда вместо констант использовались элементы enum'ов типа "if (C == Lang || CPlusPlus == Lang)". Я специально привожу только короткие сравнения, чтобы показать, что уже на них ломается мозг при чтении. Когда идёт сложное сравнение с комбинацией && и ||, то пока ручками не переписать в обратную сторону, понять это невозможно в принципе. Полный маразм превратился в тотальный маразм, когда он начал менять местами аргументы, передаваемые в strcmp: "if (!strcmp("abc", str) || !strcmp("qwe",str))". И всё это исключительно ради того, чтобы раз в сто лет не ошибиться и не написать "=" вместо "==".

К чему я всё это написал. Граждане, не слушайте кандидатов и докторов наук, академиков и прочих теоретиков, и не превращайте код в гавнокод на ровном месте.
1
darkAngel
Технофашист
219 / 202 / 11
Регистрация: 11.03.2009
Сообщений: 883
15.12.2010, 07:57  [ТС] 37
недоразумением можно считать разрешённой синтаксисом С++ использование операции присваивания в выражении if. В паскале, к примеру, этого нет.

Кто-нибудь вообще хоть раз пользовался присваиванием так извращённо?
0
Dzhej-Dzhej
Заблокирован
15.12.2010, 10:30 38

Не по теме:

Цитата Сообщение от darkAngel Посмотреть сообщение
Кто-нибудь вообще хоть раз пользовался присваиванием так извращённо?
попробую, когда буду писать код, который не буду больше отлаживать



у меня бывают глюки такого типа:
минут 15 не могу понять, почему VS подчеркивает красным
а потом доходит, что проект на vb.net, а я туда написал на C#
0
Alligieri
CEO
Эксперт С++
2253 / 1243 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
15.12.2010, 11:02 39

Не по теме:

Цитата Сообщение от darkAngel Посмотреть сообщение
Кто-нибудь вообще хоть раз пользовался присваиванием так извращённо?
блин не вчитался, конечно это извращение:)



Добавлено через 2 минуты
Цитата Сообщение от Evg Посмотреть сообщение
К чему я всё это написал. Граждане, не слушайте кандидатов и докторов наук, академиков и прочих теоретиков, и не превращайте код в гавнокод на ровном месте.
вот тут согласен на миллион процентов
0
Evg
Эксперт CАвтор FAQ
19358 / 7207 / 538
Регистрация: 30.03.2009
Сообщений: 20,151
Записей в блоге: 30
15.12.2010, 14:29 40
Цитата Сообщение от darkAngel Посмотреть сообщение
Кто-нибудь вообще хоть раз пользовался присваиванием так извращённо?
Стандартное "нормальное" применения на примере побайтного чтения файла:

C
1
2
3
4
5
6
7
FILE *fp;
int ch;
 
while ((ch = fgetc (fp)) != EOF)
{
  ...
}
Добавлено через 1 минуту
Без присваивания внутри условия можно написать только неудобными способами
0
15.12.2010, 14:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2010, 14:29

Глупые вопросы
Здравствуйте, ищу помощи в следующих вопросах. 1. На билдере создан некий...

Глупые вопросы
Поскольку с меня электрик плохой как и электронщик хочу задать вопросы,вот...

Перенаправление на другой запрос из-за опечатки
Всем доброго времени суток. У будущего сайта есть название. Но если ввести его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru