![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.03.2008
Сообщений: 9
|
![]()
Здраствуйте. Работаю над одной програмой но никак не могу понять в чем случилась проблема. Суть в следующем. Создаю клас, в нем куча методов полей( большая часть которых динамические масивы). В главном модуле создаю екземпляр этого класа, и вызываю некоторые из его методов, после этого вызываю деструктор и присваиваю переменной значений nil. Но после этих операций, если я запускал програму из самой среды, выскакивает сообщение о направильной работе с указателями (хотя вроде бы все ращеты програма производит), если же просто из винды, то сообщение об ошибке и после этого приложение можно вырубить только с диспетчера. В чем может быть проблема, или хотя бы как можно отследить эту ошыбку (просто пошагово протрасировать всеь процес от момента инициализации переменной этого класа до уничтожения, ничего не дает). Дело еще в том, что этот клас я создал как копию другого (не наследование, а просто скопировал код), притом тот другой клас работает без ошибок (в этом класе я внес небольшие изменения, но их я уже прослеживал не раз, и никаких отклонений не нашол). Клас в котором происходятошибки называется TTask2. Ошибка возникает если например в програму загрузить файл "розм1.txt" и запустить расщеты. Если кто-нибуть поймет в чем дело отпишите пожалуста. Исходный код и тестовый файл в прикрепленном архиве.
Последний раз редактировалось neo_m; 11.06.2008 в 22:12. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Точно ошибка с указателями ?
У меня при выполнении только ошибка, связанная с преобразованием StrToFloat - в файле розм1.txt заменил точки на запятые и все работает. Попробовал несколько раз загружать файл, делать расчет - ошибки не добился. Правда, у меня нет компонента RXDice. Соответствующие ссылки на него я убрал. А вообще класс достаточно большой. Причем инициализация внутренних переменных производится и в методах класса и внешними вызовами - сложно отследить где что меняется. Если ошибка все-таки есть, советую протрассировать начиная с TaskArrang:=TTask2.Create(limit,var iable,h); в MainUnit до вызова TaskArrang.Destroy. // Не рекомендуется вызывать destroy напрямую. Лучше вызывайте free. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 05.03.2008
Сообщений: 9
|
![]()
Спасиба, что посмотрел. Но у меня действительно ошибка с указателями. Я даже не знаю, что делать, может это у меня в системе уже какойто глюк, или вирус. потому что при работе над этим проектом, при отладке я находил один глюк( один из динамических масивов у меня без всяких команд разименовывался, в смысле ни начто не указывал, при том я проходил пошагово от последнего места где этот масив еще указывал на даные, до того где он ни начто не указывает, и ничего так и не нашол). Возможно у меня действительно уже что-то с системой. Ладно еще раз спасибо, буду думать что делать (или еще рытся в коде или переустанавливать систему).
А насчет вызова деструктора, я даже не знаю, просто у меня там в класе используются поля типа TDynamMatrix, которые тоже являются класами и для них желательно использовать свои деструкторы (потому как в них идет работа с большими масивами памяти и е желательно освободить после использования). Но спасибо за совет, может попробую еще на другой машине откомпилировать проект. Последний раз редактировалось neo_m; 11.06.2008 в 23:28. |
![]() |
![]() |
![]() |
#4 |
Регистрация: 05.03.2008
Сообщений: 9
|
![]()
Странно но я перепробовал запускать програму на разных машинах, с разными ОС (в смысле зборками, с разными прибамбасами и обикновенные окна) но результат остался тот же, при загрузке с файла и нажатии кнопки "Провести розрахунки" програма вылетает с появлением сообщения "Invalid pointer operation".
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
? Даже не знаю.
Не смог добиться такого эффекта. Вот exe-шник, чтобы Вы смогли проверить. Может последовательность действий не та. (Проверять весь код не воспроизведя ошибку достаточно утомительно). В коде никаких исправлений (кроме того, что нет RxDice). Загружаю файл с данными "файл/завантажити", розм1.txt, нажимаю "Провести розрахунки" - все работает. Последний раз редактировалось alexBlack; 12.06.2008 в 13:05. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 05.03.2008
Сообщений: 9
|
![]()
Да нет, последовательность правильная, екзешник рботает нормально ( а компонент RxDice это чисто внешнее оформление, в расщетах он никак не участвует, он из библиотеки RxLib, такой кубик вращается). Вот ведь задача, даже не могу придумать в чем может быть причина. Я думал может быть у меня виндовс сборка ZverDVD (если слышал о такой), какой то не тако, может что-нибуть удалено нужное, но поставил виртуальную машину, установил самый обычную винду поставил Delphi но результат тот же. Потом уже пошел по знакомых, попробовал у них, то же самое. Я не знаю, может в настройках среды нужно что-то изменить, а то у меня все по умолчанию.
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 05.03.2008
Сообщений: 9
|
![]()
Кстати а какая версия Delphi? Я пользуюсь седьмой.
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Случайно наткнулся:
unit DynArray: fMemAllocated : word; fMemAllocated := fDimension*sizeof(TDynArrayBaseType ); // 20000*8 ---------------------------------------------------------------- У меня Turbo Delphi Explorer. А в D7 ошибка действительно возникает. Range Checking error в строке FC[Round(ST.Element[beginNewTable+NLimit+i+1,1])+3]:=0; и портится какой-то указатель Проверьте это выражение. Если эту строку закоментировать, ошибки не появляется. Последний раз редактировалось alexBlack; 12.06.2008 в 14:20. |
![]() |
![]() |
![]() |
#9 |
Регистрация: 05.03.2008
Сообщений: 9
|
![]()
Огромное спасиба, буду пробовать. Еще раз спасиба что уделили моей проблеме столько времени
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите пожалуста с компонентом | Terran | Компоненты Delphi | 3 | 02.02.2008 14:28 |
Помогите,пожалуста! | Регина | Помощь студентам | 5 | 30.05.2007 23:02 |
Помогите пожалуста!!! | juden | Общие вопросы Delphi | 2 | 23.05.2007 14:37 |
Помогите,пожалуста! | Регина | Помощь студентам | 4 | 17.05.2007 01:19 |