Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.21;
Скачать: CL | DM;

Вниз

Нехватка памяти   Найти похожие ветки 

 
McSimm2   (2003-07-09 13:27) [0]

Почему, если
написать
setlength(MyMas,1000);
то программа нормально работает, а если

SetLength(MyMas,1);
for i := 1 to 100 do
begin
setlength(MyMas,length(MyMas)+1);
{..}
end;

то вываливается по нехватке памяти ???
В чём беда ?


 
Johnmen ©   (2003-07-09 13:37) [1]

В том, что 100+1<1000


 
McSimm2   (2003-07-09 13:39) [2]

Очепятка - и там и тас 1000


 
Anatoly Podgoretsky ©   (2003-07-09 13:42) [3]

В том, что в первом случае сразу сто, а во втором случае 100 раз по одному + единица. Что такое MyMas?


 
McSimm2   (2003-07-09 13:47) [4]

TMyRec=record
{...}
end;
FMyMas = array of TMyRec;
MyMas: FMyMas



 
Skier ©   (2003-07-09 15:24) [5]

>McSimm2 (09.07.03 13:27)
for i := 1 to 100 do
begin
setlength(MyMas,length(MyMas)+1);
{..}
end;
А что таится за {..} ? Может там баг ?


 
[lamer]Barmaglot ©   (2003-07-09 15:31) [6]

Если мне склероз не изменяет, то length динамического массива перед первым использование дает -1. Поэтому если сначала ему присвоить хотя бы 1, а потом выполнять код, то может быть...
Вообщем ищи завязки между setlength и length. Помню были подобные проблемы в детстве...


 
Переяслов Григорий ©   (2003-07-09 15:33) [7]

> [lamer]Barmaglot © (09.07.03 15:31)
Ты не прав. Length(пустой массив) = 0.

> McSimm2 (09.07.03 13:27)
Ищи баг в другом месте


 
MBo ©   (2003-07-09 15:53) [8]

в FAQ надо внести.

Установил длину, скажем, мегабайт.
Выделено соотв. количество памяти

в цикле немножко увеличиваешь длину
выделяется НОВЫЙ кусок памяти, поскольку в старый уже не влезет.
И так много раз.

Память-то освободится - но когда у системы будет на это время, а пока что ты забьешь ее много.




 
Serginio   (2003-07-09 16:36) [9]

Опять же Все зависит от длины перераспределяемой непрерывной памяти. Если можно выделить памяить сразу за концом динамического массива то все прекрасно иначе выделяется кусок памяти равный новому размеру и копируются данные. В итоге через некоторое время память франментируется и просто не хватает памяти для ее нового выделения. Используй массив (список) кусков выделенной памяти. (Теже проблемы TMemoryStream,TList,TStringList)



Страницы: 1 вся ветка

Текущий архив: 2003.07.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
3-67714
Sliften
2003-06-25 22:34
2003.07.21
можно ли прграмно дабовлят в таблицу новые колонки


7-68082
dim-
2003-05-08 12:04
2003.07.21
Сканеры с автоподачей


14-67981
Davinchi
2003-07-03 17:41
2003.07.21
Нуже компонент для архивации/разархивации файлов!!!


1-67802
Rel_
2003-07-09 13:17
2003.07.21
HexToBin


1-67766
Dmk
2003-07-09 02:56
2003.07.21
Проблема с курсорами