Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];
ВнизОператор SomeDynamicArray:=nil делает не то, что хотелось бы =) Найти похожие ветки
← →
Pasha L (2008-07-01 17:12) [0]Здравствуйте.
У меня есть массив Pointer"ов "A". Я хочу посоздавать массивов и записать их адреса в "A". Затем уже в другой подпрограмме продолжить работу с созданными массивами, восстановив их по сохраненным адресам.
Делаю так (показано схематично):for i:=1 to 5 do begin
setLength(tmp,10);
A[i]:=tmp;
tmp:=nil;
end;
tmp:=nil я делаю из тех соображений, чтобы при вызове setLength(tmp,10); создался новый массив (то, что мне и нужно). Но при tmp:=nil, как я понимаю, память, занимаемая массивом tmp, освобождается, а мне нужно, чтобы эта память оставалась занятой, а значение tmp просто занулялось.
Наглядный пример:
{$APPTYPE CONSOLE}
var
p:Pointer;
a,b:array of integer;
begin
setLength(a,5);
p:=a;
//a:=nil;
//вот если включить предыдущую строчку, то будет ошибка.
b:=p;
writeln(length(b));
readln;
end.
Что делать в таком случае?)
← →
Pasha L (2008-07-01 17:16) [1]То есть я, конечно же, могу создать класс, где будет поле типа массив. И сохранять адреса не на массивы, а на объекты этого класса. Но хотелось бы чего нибудь попроще)
← →
Поросенок Винни-Пух © (2008-07-01 17:40) [2]У меня есть массив Pointer"ов "A".
TList вместо массива
← →
Pasha L (2008-07-01 17:50) [3]=) ну вот я TList и использую. Если бы я использовал не TList, то не мучался и сделал бы array of array of SomeType.
← →
Поросенок Винни-Пух © (2008-07-01 18:28) [4]p:=a;
//a:=nil;
p:=a;
//a:=nil;
p := nil;
сам массив никуда не денется
← →
Anatoly Podgoretsky © (2008-07-01 18:42) [5]> Pasha L (01.07.2008 17:12:00) [0]
setLength(A[i],10);
← →
Pasha L (2008-07-01 18:47) [6]Поросенок Винни-Пух © (01.07.08 18:28) [4]
чё то я вас не понял.
Anatoly Podgoretsky © (01.07.08 18:42) [5]
)))да уж, всё просто... немного дополнил и самое оно:
setLength(T_array_of_SomeType(A[i]),10);
а то A[i] типа Pointer, поэтому Incompatible types. А так всё оке.
благодарю
← →
Юрий Зотов © (2008-07-01 21:30) [7]> Pasha L (01.07.08 18:47) [6]
> A[i] типа Pointer
А на хрена? Почему не сделать по-человечески?
type
TDynamicArray = array of ...;
var
A: array[1..5] of TDynamicArray;
...
for i := 1 to 5 do
SetLength(A[i], 10);
Или еще проще - двумерный динамический массив. Кстати, из ветки непонятно, почему он не может быть обычным двумерным статическим массивом.
← →
Правильный-Вася (2008-07-02 15:46) [8]непонятно так же фраза
> посоздавать массивов и записать их адреса в "A". Затем уже
> в другой подпрограмме продолжить работу с созданными массивами,
> восстановив их по сохраненным адресам.
какие могут быть адреса в другой программе, если у каждой программы свои адреса
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c