Proxin, больше НИКОГДА так не делай. Ты потерял возможность обращаться к какому-либо элементу дин.массива, отличному от 0, при включенном режиме {$R+} (а этот режим при отладке вообще не вздумай выключать, если хочешь, чтобы программа работала, и выдавала правильные, а не какие-попало результаты). Смотри:
| Код | {$R+} type ma = array[0..0] of integer; mp = ^ma;
var m: mp; i: integer; begin getmem(m,4*sizeof(integer)); for i := 0 to 3 do begin m^[i] := i; end; end. |
Должно работать, да? А не будет:
| Код | Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International Runtime error 201 at 0000:0040. |
, потому как ты описал тип-массив с индексами от 0 до 0, и тут же выходишь за пределы диапазона.
Я делаю так:
| Код | {$R+} type T = integer; ma = array[0 .. pred(65520 div sizeof(T))] of T; mp = ^ma; |
И волки сыты (имеешь возможность обращаться к любому элементу массива) и овцы - целы (Range Check не отключен, и позволит тебе ловить другие вылеты за границы диапазона в программе).
Добавлено через 10 минут и 18 секунд
Цитата(Proxin @ 2.3.2010, 14:26 ) | | Пока придумал только делать через функцию со вторым вспомогательным массивом |
Навскидку - как минимум два варианта, избавляющих тебя от доп. массива и постоянных перераспределений памяти: 1) напиши свою реализацию через связный список, тогда будешь добавлять/удалять элементы легко 2) воспользуйся TCollection для хранения данных вместо дин. массива.
Третий вариант (перейти на FPC, где динамические массивы, и не только, есть) не озвучиваю, хотя очень хочется  |