6 / 6 / 5
Регистрация: 17.03.2015
Сообщений: 60
|
||||||
1 | ||||||
Поиск ошибки в коде27.07.2015, 08:54. Показов 1640. Ответов 22
Метки нет (Все метки)
А вот еще один дурной вопрос от псевдопрограммиста:
следующий код содержит функцию поиска объекта и участок кода, который производит поиск, а потом делает чего-то с объектом
это только для примера ошибка происходит, если объект не найден! почему, ведь если он не найден (Obj = nil), то функция выдаст FALSE, а в этом случае вызов метода не должен происходить. Ваши варианты?
0
|
27.07.2015, 08:54 | |
Ответы с готовыми решениями:
22
Ошибки в коде Ошибки в коде ошибки в коде Ошибки в коде |
20 / 20 / 7
Регистрация: 08.07.2015
Сообщений: 176
|
||||||||||||||||||||||||||
27.07.2015, 10:07 | 2 | |||||||||||||||||||||||||
Если писать пример, то почему бы не написать нормальный пример? Почему у вас функция GetObject находится внутри другой процедуры? Структура такая должна быть
После
0
|
6 / 6 / 5
Регистрация: 17.03.2015
Сообщений: 60
|
|
27.07.2015, 11:00 [ТС] | 3 |
Вот те раз!
да ниче не должно идти, если в самом начале поставить "program Test1;", тогда получится настоящее консольное приложение! написано же, где копать: нееееее, мыслите абстрактно
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
27.07.2015, 11:29 | 4 |
Сообщение было отмечено deva1i0 как решение
Решение
0
|
96 / 84 / 49
Регистрация: 17.09.2014
Сообщений: 670
|
||||||
27.07.2015, 11:30 | 5 | |||||
deva1i0, дело не в коде функции... каким образом вы заполняете массив
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
27.07.2015, 12:01 | 6 |
Чтой-то вдруг не цепляться ?
Ты же ни словом не обмолвился о том могут ли в массиве a[] присутствовать более одного объекта одного и того же класса)
0
|
6 / 6 / 5
Регистрация: 17.03.2015
Сообщений: 60
|
|
27.07.2015, 17:31 [ТС] | 7 |
Да дофига может чего присутствовать, уважаемые читатели!
Спасибо, что хоть в этой теме не цеплялись к моему неаристократическому происхождению :P а ответы у вас у всех неправильные и копаете вы все не в ту сторону! при чем здесь, как заполняешь массив? да никак не заполняю! и не буду! ОШИБКА И БЕЗ НЕГО ЕСТЬ!!! а ошибка в том, что инициализации переменной b нет! и не будет! тема закрыта
1
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
27.07.2015, 20:08 | 8 |
Какого же лешего тогда ты обращается к неинициализированной переменной ?)
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
27.07.2015, 20:37 | 9 |
Чушь не пори очередную. Глобальные переменные и без твоей помощи инициализируются прекрасно.
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,254
|
|
28.07.2015, 00:41 | 10 |
ТС порет чушь в другом месте. Он (она) сдуру передаёт в функцию переменную Obj с классификатором var, а результат функции возвращается как Boolean.
0
|
6 / 6 / 5
Регистрация: 17.03.2015
Сообщений: 60
|
|||||||||||||||||||||
28.07.2015, 06:00 [ТС] | 11 | ||||||||||||||||||||
Да почему сдуру? Че все такие предвзятые?!
Конечно сдуру! Это ведь код с заранее существующей ошибкой! Весь текст необходимо считать абстрактным, т.е. переменная может быть и не глобальной. Чтобы код корректно работал нужно в функцию GetObject первым делом вставить Obj := nil; И чего не нравится в результате функции? кто-нибудь знает о функции в модуле System:
в самой первой строке ф-ции
Добавлено через 2 минуты
из-за неправильной реализации функции поиска
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
28.07.2015, 08:09 | 12 |
Первым делом нужно не Obj обнилять (его там вообще не нужно трогать, если ф-ция намерена вернуть False), а задать правильное условие досрочного выхода из for-цикла.
Сейчас у тебя цикл хреначит по всем эл-там массива a[], вне зависимости от выполнения условия в if-выражении, что попросту лишено смысла.
0
|
6 / 6 / 5
Регистрация: 17.03.2015
Сообщений: 60
|
|
28.07.2015, 08:35 [ТС] | 13 |
вот это лишено смысла:
первым делом нужно Obj обнилять если ты против, жалуйся в Embarcadero оптимизация - дело следующее после устранения ошибок Добавлено через 1 минуту тема закрыта, всем спасибо
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
28.07.2015, 08:55 | 14 |
Да за коим лешим его обнилять-то ?)
Включи мозг - если вызываемая ф-ция поиска вернула False, то нафига вызвавщему ее коду обращаться (неважно зачем и как) после этого к переменной Obj, каким бы ни было ее содержимое ? А если тебе нужно обнилить/удалить какой-то эл-т массива, к коему обращается ф-ция поиска, то для этого следует либо предусмотреть отдельную ф-цию а-ля RemoveObject(AObject: TObject) либо в ф-ции GetObject возвращать по ссылке не сам объект, а адрес хранящего его элемента массива.
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
28.07.2015, 09:17 | 15 |
Об этом я еще в посте #4 написал, поэтому отрицать не буду)
В твоем примере (абстрактный он или еще какой) в переменной b вообще нет особого смысла, т.к. объект можно уничтожить и внутри ф-ции. А вообще, осмысленность кода можно оценивать лишь зная решаемую им задачу, которую ты не потрудился озвучить. Поэтому рассуждать тут можно долго, но все это будет не о чем. Добавлено через 7 минут В данной реализации она вернет Тру, если переменную не обнулять.
0
|
mss
|
28.07.2015, 09:37
#16
|
0
|
28.07.2015, 11:30 | 17 |
я вот не знаю, программирует ли так кто-то вообще ибо на свой "нубо"взгляд, такие коды лишены смысла быть вообще.
первое, что смущает очень, дак это передается какой-то глобальный массив в какую-то функцию и производит там с ним какие-то действия, что уже нарушает "структурированность" программы, еще бы меток наделали для переходов За коем фигом так искать элементы в массиве? В цикле если даже чего и найдется, то ничего с этим произведено все равно не будет, а будет лишь проверено последнее нахождение на nil, ну а оно уж каким будет таким и будет, зачем весь спектакль с циклами? Почему именно искать по имени класса? Почему не произвести просверку на тип класса? if a[nn] is TEdit then ... чтобы в b что-то положить, надо сначало иметь годную для использования b, ибо адрес возвращать некуда ну все это уже и до меня было описано, я просто свою точку зрения выдал да и все вопросы от ТС какие-то непонятные, непонятные в плане зачем весь этот огород, поспорить? Доказать что-то? Чем-то померяться? Или как ТС писал в некой теме, что вакансии открываются на место дельфиста... Может работника подыскивает , а не статистику собрает, как он выразился в той некой теме
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
28.07.2015, 12:02 | 18 |
Внутри подобной по логике вызываемой ф-ции не должно быть ничего из того, что там написал ТС)
Ф-ция возвращает указатель на эл-т массива, коим является некий объект, который может быть спокойно уничтожен вне данной ф-ции (что мы и видим в коде ТС), а в массиве останется эл-т, указывающий на мусор, и при следующем вызове ф-ции - AV.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
28.07.2015, 12:19 | 19 |
Эт точно)
Ф-цию в топку ..Либо передавать ей нужно ссылку на данные типа ^TObject, а не ссылку на TObject. Только в этом случае у вызывающего кода появляется возможность обнилить эл-т массива или что-то там еще с ним отчудить.
0
|
|
25.07.2016, 18:41
Поиск ошибки в коде
#20
|
Не по теме: Какое отношение к топикстартеру?.. Эх, заблокировал бы Вас всех.
0
|
25.07.2016, 18:41 | |
Ошибки в коде ошибки в коде Ошибки в коде Исправить ошибки в коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |