![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Предлагаю собрать здесь ошибки, которые
Просьба: постить сюда ошибки, причину ошибки, и, самое главное, как уберечься от их совершения. Итак. 1)
2)
3)
Это сообщение отредактировал(а) borisbn - 6.2.2012, 20:46 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
на первый пример недавно наткнулся. потратил часа 4 на поиски бага. весь моцг себе вынес ###
![]() но самое смешное это то, что код я написал за час! |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
функция возвращает список регулярных файлов в директории..
это набросок одной из функций, которая мне нужна, в нем две грубейшие ошибки.. пожалуйста назовите их.. -------------------- undefined |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Честно говоря, тема не об этом... Ошибок много: Не проверяется выход за пределы буфера. при выходе за пределы буфера start будет показывать мимо буфера Тут тоже нужно вставить проверку, что вы не превысили лимит m_size... Не проверяется возвращаемое значение, а вдруг файла уже нет... или PATH_MAX не хватило... и в file_info мусор... Раз plen может оказаться нулевой, то было бы неплохо перед strlen проверить prefix на NULL, если, конечно, Вы не пользуетесь исключительно browse_dir( ..., ""); Если предполагается, что в matches ещё ничего нет, то нужно правильно проинициализировать start: *start = 0; dirp не проверяется на NULL... Ну и можно в конце сделать buff[*start] = '\0', если место ещё оставалось... И конечную ';' (если она есть) поглотить, но я не знаю, как буфер будет использоваться дальше... Это сообщение отредактировал(а) feodorv - 6.2.2012, 23:49 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ну дык, стандарт: 20/80. ну, почти ![]() ![]() По поводу выхода за границы массива - пользуйтесь STL. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
fish9370 |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
feodorv, спасибо за работу
да..
соглашусь, добавим эту проверку
нет, исключительно не пользуюсь, но вызывающая сторона гарантирует, что префикс не равен NULL, хотя, я Вас услышал..
возможно индексное переполнение - это была первая грубая ошибка.. возможно переполнение - это вторая грубая ошибка
там может ничего не быть, но сама функция предполагает дополнение буфера, это здесь не подходит..
это не требуется.. Добавлено @ 10:04 извините, забыл напомнить, я пишу исключительно на Си (не считая скриптовых языков) затем, что я собираюсь привезти правильный вариант, а тот код абсолютно рабочий, за исключением тех ньюансов, которые упаминул feodorv - ошибки на этапе исполнения, при особых обстоятельствах, самые опасные ошибки.. Это сообщение отредактировал(а) fish9370 - 7.2.2012, 11:28 -------------------- undefined |
||||||||||
|
|||||||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
borisbn, попроси модераторов чтоб удалили все начиная с третьего поста.
fish9370, буду знать, какой код ты пишешь ;) Добавлено через 30 секунд или со второго) он тоже оффтоп. |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Сложно вспомнить какие-то конкретные часто повторяющиеся проблемы. Но если в целом охарактеризовать грабли, на которые я периодически наступаю, - это необходимость писать на С++. Ниже я приведу немного конкретики, но без примеров кода. Если захотите кода по определенным пунктам, его есть у меня.
Вот тут на форуме один чувак... volatile или как-то так... просто прется, что С++ остается все таким же "простым" и делает именно то, что требует от него программист. С моей точки зрения, для языка, позиционирующего себя как высокоуровневый, с настолько переусложненным синтаксисом, продолжать оставаться надстройкой над ассемблером недопустимо. В стандартной библиотеке языка все пучком... Конечно в ней очень многого не хватает, но в целом хотя бы ее дизайн очень хорош. Но в core language писать и не удивляться на неочевидности невозможно!
Это сообщение отредактировал(а) newbee - 7.2.2012, 11:15 -------------------- You're face to face With man who sold the world |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
done. кроме сообщ. newbee -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Это я начала) Слушала одноименную с минусом песню ленинграда, читала тему и как-то не удержалась (
Напротив, поциент демонстрирует способность к социальной адаптации. Код читается так: если в теме встречается юзернейм "бусткодер", я затыкаюсь и ухожу. ![]() -------------------- You're face to face With man who sold the world |
|||
|
||||
Static |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: 1 Всего: 2 |
эээ, народ... спокойно!
мое любимое:
Еще, когда только начинал работать, - отлично прошелся по конструкторам копирования. Точнее, по их отсутствию) Еще хорошо стреляет неправильно написанная проверка выхода из рекурсии. Которая спокойно работает пару месяцев, а потом начинает крашиться. Исключительно в релизе, например. Еще вот такое
В релизе, естественно, падает =) Сейчас еще, может, чего-нибудь вспомню. --------------------
Я не настолько безнадежен, как кажется... |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
полагаю, намек на происхождение от слова Поц ;) Добавлено через 4 минуты и 1 секунду newbee, про виртуальную хрень и наследование ты же в курсе: используй функциональный стиль. С++ при этом становится как Си_на_стеройдах! |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
про остальное, вроде, понял, а это - никак не пойму. чойта ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Вызови из конструктора виртуальный метод например.
ФП не панацея, в С++ ФП неудобен. /*Смотрела недавно бустовский феникс, не знала плакать или смеяться*/ -------------------- You're face to face With man who sold the world |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
не вижу проблем... да, поведение будет отличаться от вызова той же функции не из конструктора. на момент работы конструктора базового класса виртуальной таблицы наследника не существует, как и самого наследника. это как если бы папа и сын родились одновременно ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |