Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с динамической памятью! [D7, XP]


Страницы:   1 2

Dysan ©   (2006-02-02 18:17:00) 

в программе часто использую SetLength(...)
и как мне кажеться из-за такого способа в программе часто вылетает ошибка "out of memory" и т.п. в тех места которые должны работать как часы и перепроверены много раз, а может и не вылететь и отработать как надо!
отсюда вопрос. я прав? и как тогда правильно работать с динамическими массивами?


Desdechado   (2006-02-02 22:29:00) [21]

> гражданин Desdechado ©   (02.02.06 19:59) [7] утверждает, что
> динамические массивы основаны на списках, что уж точно бред
Если ты внимательно читал пост [7], то там написано "подозреваю", а не "утверждаю". Твои же посты как раз очень категоричны и, как принято, совершенно без аргументов.

> Ищи глюк в себе
На личности переходят, когда по существу сказать нечего.


Loginov Dmitry   (2006-02-02 22:24:00) [22]


> Sergey Masloff   (02.02.06 22:08) [12]
>
> Loginov Dmitry ©   (02.02.06 22:01) [10]
> >С появлением динамических массивов потребность в конструкциях,
>  >подобной указанной вами, практически отпала.
> Извините, это бред


Это не есть бред. Я же не сказал, что полностью отпала. Просто сейчас благодаря динамическим массивам стало гораздо проще организовывать списки. А гражданин Desdechado ©   (02.02.06 19:59) [7] утверждает, что динамические массивы основаны на списках, что уж точно бред.


Desdechado ©   (02.02.06 22:07) [11]
> потребность в массивах фиксированной длины (и TList тем
> паче) не отпадет, пока будут глюки с динамическими массивами


Ищи глюк в себе.


Sergey Masloff   (2006-02-02 22:20:00) [23]

А то так можно заключить что с появлением типа Variant надобность во всех остальных типах отпала (ну или практически отпала)
;-)))


Desdechado   (2006-02-02 22:17:00) [24]

> на фиг заморочки с управляемыми переменными
именно поэтому я вставил "(и TList тем паче)"


Sergey Masloff   (2006-02-02 22:13:00) [25]

Desdechado ©   (02.02.06 22:07) [11]
> имхо, потребность в массивах фиксированной длины (и TList тем паче) не >отпадет, пока будут глюки с динамическими массивами
И потом не отпадет потому что на фиг заморочки с управляемыми переменными когда можно просто руками быстро выделить блок памяти и максимально быстро по нему позиционироваться просто переставляя указатель а потом замочить когда не надо не возлагая это на других.
 Все же динамические массивы это несколько другое и для других целей


Sergey Masloff   (2006-02-02 22:08:00) [26]

Loginov Dmitry ©   (02.02.06 22:01) [10]
>С появлением динамических массивов потребность в конструкциях, >подобной указанной вами, практически отпала.
Извините, это бред


Desdechado   (2006-02-02 22:07:00) [27]

> потребность в конструкциях практически отпала
И что, из этого начинает следовать, что TList основан на динамических массивах?
Странная логика... Тем более странная, что TList был с первой версии Дельфи, а не с 4-й.

P.S. имхо, потребность в массивах фиксированной длины (и TList тем паче) не отпадет, пока будут глюки с динамическими массивами


Loginov Dmitry   (2006-02-02 22:01:00) [28]


> используется массив фиксированной длины, а не динамический.


Не совсем так. Раньше динамических массивов не было (до появления Delphi 4), однако их функции успешно выполняли, как вы выразились, "массивы фиксированной длины". С появлением динамических массивов потребность в конструкциях, подобной указанной вами, практически отпала.


Desdechado   (2006-02-02 21:33:00) [29]

> Наоборот только
Не надо ля-ля. Цитирую Classes.pas
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
TList = class(TObject)
private
 FList: PPointerList;

Как видно, используется массив фиксированной длины, а не динамический.

А вот динамический очень напоминает список по своим возможностям и поведению.


Loginov Dmitry   (2006-02-02 20:12:00) [30]


> Подозреваю, что динамические массивы внутри реализованы
> через тот же TList...


Наоборот только.


Desdechado   (2006-02-02 19:59:00) [31]

Я с такой вешью сталкивался. Динамические массивы реализованы как-то кривовато. Понемножку (с маленькими объемами и не сильно терзая изменениями размеров) с ними работать можно. По-серьезному (десятки тысяч элементов) - вряд ли, ибо жрет многопамяти и валится на AV.
Я стал использовать TList, все пошло как по маслу. Рекомендую.

P.S. Подозреваю, что динамические массивы внутри реализованы через тот же TList, но вот как-то не так...


Darvin   (2006-02-02 18:58:00) [32]

берешь и комментируешь подозрительные места в проекте, пока не заработает. Так и находишь место косяка.


Dysan   (2006-02-02 18:49:00) [33]

ну код показать затруднительно.
весь проект занимает тысяч 10 строк кода
поэтому что показывать я не знаю!

а "жёской" это значит во время работы создаеться много разных массивов удаляються снова создаються т.п. - жесть одним словом :)


Gero   (2006-02-02 18:43:00) [34]

> после "жёской" работы

Это как?


TUser   (2006-02-02 18:40:00) [35]


> тогда обьясните мне почему программа при запуске выдает
> ошибку при выходе из процедуры на последней команде (причем
> любой! главное чтоб она была последней) после "жёской" работы
> с большим кол-вом динамических массивов. НО! если пройтись
> дебагом по всем строчкам кода то из этой самой процедуры
> она выйдет без проблем! и никакой ошибки не возникнет!

Полагаю, что надо посмотреть на твой код.


Dysan   (2006-02-02 18:32:00) [36]

тогда обьясните мне почему программа при запуске выдает ошибку при выходе из процедуры на последней команде (причем любой! главное чтоб она была последней) после "жёской" работы с большим кол-вом динамических массивов. НО! если пройтись дебагом по всем строчкам кода то из этой самой процедуры она выйдет без проблем! и никакой ошибки не возникнет!


Johnmen   (2006-02-02 18:22:00) [37]

Так и работать.
"out of memory" к данной процедуре прямого отношения не имеет.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо