![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 06.05.2007
Сообщений: 6
|
![]()
Суть вот в чём:
есть список cl2 и список MCList, в котором должны в данный момент времени содержатся часть элементов из cl2. Реализовано это так: cl2.LoadChainForAllContracts(listof IDs); for i := minBORD to maxBORD do begin MClist := TContractList.create; for cntr := 0 to cl2.count - 1 do begin if cl2[cntr].Current_loadby_ID = cl.id then (*****************) Begin MClist.Add(cl2[cntr]); End; end; [i] { Здесь, внутри цикла, ещё вызывается delete для отдельных элементов MClist, но даже если его убрать, лучше не становится... } MClist.free; end; В итоге на какойто итереции вылетает OutOfMemory (повторное обращение к уже освоюождённой памяти) на строке (*****************). Прошолся F8, оказалось, что к-тый элемент cl2 недоступен, при чём 100% НЕ ТОТ, КОТОРЫЙ КОПИРОВАЛСЯ В MClist!!! и далеко не на первой итерации, на которой это копирование происходило. cl2 используется лишь 2 раза, где вы видите. На MClist ничего не ссылается. Если убрать строку MClist.Add(cl2[cntr]); , всё, естественно, работает. Ставил create, free вне цикла, а внутри него - clear ---- опять не помогает........................... ................................... ................................... ..... |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 30.03.2007
Сообщений: 124
|
![]()
Я уже встречался с этой проблемой, лечил созданием дубликата, по другому во всех вариациях одно и тоже, если не сразу то после 2-3 обращения. Тоисть:
Begin e:=tobject.create; e:=cl2[cntr]; MClist.Add(e); End; ![]() Спасибо не нужно, а на весы слева кликнуть не помешает!!! |
![]() |
![]() |
![]() |
#3 |
Регистрация: 06.05.2007
Сообщений: 6
|
![]()
MContr := TContract.create;
MContr := cl2[cntr]; MClist.Add(MContr); Тоже самое выдаёт, только чуть боьше итераций проходит... |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 30.03.2007
Сообщений: 124
|
![]()
попробуй присваивать не обьект (MContr := cl2[cntr]), а просто переносить данные, к примеру:
MContr.left:=cl2[cntr].left ............. ![]() Спасибо не нужно, а на весы слева кликнуть не помешает!!! |
![]() |
![]() |
![]() |
#5 |
Регистрация: 06.05.2007
Сообщений: 6
|
![]()
В принципе, это возможно, но данных слишком много: несколько десятков полей, списки объектов:
cl2[cntr].name; .......... cl2[cntr].BuildingsList <---- тоже указатель, фактичесски... Короче, попробую. Но чувствую, и это не спасёт... |
![]() |
![]() |
![]() |
#6 |
Регистрация: 06.05.2007
Сообщений: 6
|
![]()
Всё пашет. Спасибо. Тему можно закрыть.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с указателями в паскале | Cartman18 | Помощь студентам | 3 | 12.05.2008 09:43 |
Помогите пожалуйста с динамической памятью и указателями | Riddick2013 | Помощь студентам | 1 | 19.12.2007 14:41 |
проблема с указателями =\ | shad0w | Общие вопросы C/C++ | 9 | 09.12.2007 03:36 |