![]() |
|
|
#1
|
|||
|
|||
|
Добрый день!
Помогите, пожалуйста, разобраться, почему я получаю в переменной pi одно и то же значение ? Код надуманный, просто чтобы понять проблему: Код:
procedure TForm1.Button1Click(Sender: TObject);
var
L: TList;
pi: PInteger;
i: Integer;
ii: Integer;
begin
L:=TList.Create;
for i := 0 to 5 do
begin
New(pi);
pi^:=10*i;
L.Insert(i,pi); //так тоже делал: L.Add(pi);
Dispose(pi);
end;
for i := 0 to L.Count - 1 do
begin
pi:=nil;
pi:=PInteger(L.Items[i]);
ii:=pi^;
tag:=ii;
end;
end;У меня все время pi указывает на значение 50. А хотелось бы получить все значения из списка. Не могу понять, в чем дело? Заранее благодарю. Последний раз редактировалось Admin, 17.02.2012 в 10:37. |
|
#2
|
|||
|
|||
|
Прошу прощение, не знаю как удалить топик.
В общем, сам разобрался, проблема в том что я освобождал память, выделенную под указатель, в итоге элементы списка ни на что не указывали. Т.е. строчку Dispose(pi); нужно убрать ![]() |
|
#3
|
||||
|
||||
|
Ты ведь добавляешь указатели и тут же их удаляешь
Код:
var
pibuf : array of PInteger;
procedure TForm3.Button1Click(Sender: TObject);
var
L : TList;
pi : PInteger;
I, J : Integer;
begin
L := TList.Create;
for I := 0 to 5 do
begin
SetLength(pibuf, I + 1);
New(pibuf[i]);
pibuf[i]^ := 10 * I;
L.Insert(I, pibuf[i]); //так тоже делал: L.Add(pi);
// Dispose(pi);
end;
for I := 0 to L.Count - 1 do
begin
pi := PInteger(L.Items[i]);
J := pi^;
Tag := J;
end;
end; |
|
#4
|
|||
|
|||
|
|
|
#5
|
||||
|
||||
|
А ничего, что полгода прошло.
![]() |
|
#6
|
||||
|
||||
|
Ладно полгода, но искать TList в гречневой диете (судя по имени ссылки)
![]() |