|
#1
|
|||
|
|||
указатели и TList
Добрый день!
Помогите, пожалуйста, разобраться, почему я получаю в переменной 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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
|||
|
|||
|
#5
|
||||
|
||||
А ничего, что полгода прошло.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
||||
|
||||
Ладно полгода, но искать TList в гречневой диете (судя по имени ссылки)
|