Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1215070574
megavolt
2008-07-03 11:36
2008.08.03
Parsing Squid access.log


2-1215158153
Igor_34
2008-07-04 11:55
2008.08.03
Задать в программе параметры OKBottomDlg.Anchors


15-1213948991
k101k
2008-06-20 12:03
2008.08.03
будущее Delphi


15-1213864282
Сатир
2008-06-19 12:31
2008.08.03
Загрузка пакета в рантайме


2-1214983496
MaryM
2008-07-02 11:24
2008.08.03
Перемещение узлов TTreeView drag&drop ом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский