Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2012, 23:38
jedi2000 jedi2000 вне форума
Прохожий
 
Регистрация: 16.02.2012
Сообщения: 2
Репутация: 10
По умолчанию указатели и 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  
Старый 16.02.2012, 23:48
jedi2000 jedi2000 вне форума
Прохожий
 
Регистрация: 16.02.2012
Сообщения: 2
Репутация: 10
По умолчанию Сам разобрался

Прошу прощение, не знаю как удалить топик.
В общем, сам разобрался, проблема в том что я освобождал память, выделенную под указатель, в итоге элементы списка ни на что не указывали.
Т.е. строчку
Dispose(pi);
нужно убрать
Ответить с цитированием
  #3  
Старый 16.02.2012, 23:58
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ты ведь добавляешь указатели и тут же их удаляешь
Код:
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;
Dispose сделай в OnDestroy для всех созданных указателей.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 01.09.2012, 00:18
PiNo_4eT PiNo_4eT вне форума
Прохожий
 
Регистрация: 01.09.2012
Сообщения: 2
Репутация: 9
По умолчанию

TList тут! http://ecodiet.ru/diety/grechnevaya_dieta.html
Ответить с цитированием
  #5  
Старый 01.09.2012, 00:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А ничего, что полгода прошло.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 01.09.2012, 01:09
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ладно полгода, но искать TList в гречневой диете (судя по имени ссылки)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter