|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.01.2011, 00:49 | #1 |
Пользователь
Регистрация: 07.12.2010
Сообщений: 13
|
Инициализация дин. массивов Delphi
Здравствуйте, вопрос такой. Имеется вспомогательный модуль. Одна и та же процедура, запущенная из него, в одном случае работает нормально, в другом - вылетает с ошибкой "acces violation бла-бла-бла". Cуть в том, что в этой процедуре используется дин. массив. Причем, в первом (рабочем) случае, он, как и положено, инициализируется с длиной = 0, в другом по каким-то магическим причинам, он переполнен (длина 141) и забит всякой ересью. SetLength не работает - вылетает всё с той же ошибкой.
Помогите, у меня защита через 2 недели =( |
25.01.2011, 03:08 | #2 |
Форумчанин
Регистрация: 15.02.2008
Сообщений: 621
|
код продцедуры и ее вызова в студию, а если это еще и не чистая (ее работы не зависит от внешних факторов) продцедура, то тогда все в студию =)
Помог? Ну так нажми на весы!
|
25.01.2011, 11:21 | #3 |
Пользователь
Регистрация: 07.12.2010
Сообщений: 13
|
Код:
Но, как всегда бывает, сейчас включил компьютер - и всё работает... Ничего не понимаю %) |
25.01.2011, 11:27 | #4 |
Пользователь
Регистрация: 07.12.2010
Сообщений: 13
|
Здесь массив оказывается (-лся) захламленным.
Код:
А вот тут всё нормально. Хотя разницы я не вижу. Код:
|
25.01.2011, 11:33 | #5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Код:
воистину, "Опытный программист на Фортране сумеет создать фортрановскую программу на любом языке". По теме: в первом случае res — это у вас объект, который указывает в никуда, соответствено SetLength(Ua,i);, где Ua — поле неиницализированного объекта, может приводить к любым результатам. Подозреваю, что объекту Resolve во втором случае повезло больше.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 25.01.2011 в 11:46. |
26.01.2011, 00:03 | #6 |
Пользователь
Регистрация: 07.12.2010
Сообщений: 13
|
Почему в никуда? Просто таким тупым (по другому не умею) способом вызывается процедура из другого unit'a. В этом юните есть массив Ua, (принадлежащий объекту equation) который инициализируется в начале процедуры. Resolve и Res - оба объекта создаются абсолютно одинаково, разница лишь в названии.
В случае с объектом Resolve - всё клёво и сказочно. А вот в случае со вторым - беда. Была по крайней мере, после ребута компа почему-то проблема исчезла... Не хотелось бы чтобы вылезло всё это в неподходящий момент %) |
26.01.2011, 00:56 | #7 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
В никуда потому, что res — это указатель. Т.к. он хранится на стеке, то и подхватывает с него любой мусор в качестве указателя. Чтобы он указывал на область памяти, выделенную под экземпляр вашего класса, его нужно создать:
Код:
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
27.01.2011, 08:56 | #8 |
Пользователь
Регистрация: 07.12.2010
Сообщений: 13
|
Хм... Спасибо) Я так понимаю, нужно написать конструктор и деструктор для Equation, правильно?
|
27.01.2011, 11:32 | #9 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
нет, контструктор и деструктор уже написаны в TObject, от которого наследуются все классы в Дельфи. Нужно не забывать их вызвать.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Слияние двух массивов в Delphi | sauron99 | Помощь студентам | 17 | 03.04.2016 09:37 |
Обработка символьных массивов в delphi | Manya-srt | Помощь студентам | 0 | 09.11.2010 16:23 |
Обработка двумерных массивов (матриц) в Delphi | Ulena | Помощь студентам | 1 | 31.03.2010 09:35 |
Delphi передача динамических массивов | world12_tk | Помощь студентам | 7 | 23.12.2009 21:06 |
Инициализация массивов в конструкторе. | jojahti | Общие вопросы C/C++ | 7 | 27.07.2009 13:30 |